[英]SHA1 varies in java and javascript for same input
從javascript和java創建SHA1時遇到問題。 問題是不同的。 它用於驗證對Web服務器的客戶端請求。 這意味着客戶端向服務器發送一個基於base64編碼的安全密鑰,並且服務器重新生成相同的密鑰並等同於兩者相同。 請在下面找到用於在客戶端和服務器中生成密鑰的代碼。 服務器
MessageDigest mDigest = null;
try {
mDigest = MessageDigest.getInstance("SHA1");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
String input = value1 + value1 + server_key;
byte[] result = mDigest.digest(input.getBytes());
String secret = Base64.encodeToString(result, Base64.NO_WRAP);
...
//comparison logic goes here
...
客戶端(Java腳本)
var input = value1 + value2 + server_key;
//http://code.google.com/p/crypto-js/
var hash = CryptoJS.SHA1(input);
var encoded = base64Encode(hash.toString());
//WEB SERVICE INVOCATION FROM JAVASCRIPT GIES HERE.
值value1,value1,server_key在客戶端和服務器中均可用。 我們面臨的問題是,客戶端和服務器中生成的SHA1不匹配。 我知道問題是在Java中使用getBytes()和在javascript中使用字符串值生成SHA1。 CryptoJS.SHA1不支持字節數組作為參數。 我們無法更改服務器代碼,因為許多客戶端應用程序都在使用它。 任何幫助都感激不盡。
在Java中->
byte[] result = mDigest.digest(input.getBytes());
並在JavaScript中->
var hash = CryptoJS.SHA1(input);.
我相信這是問題所在。 在Java中,參數是字節數組,輸出也是字節數組。 但是在javascript中,參數是var(字符串),返回值也是var(字符串)。 我還比較了CryptoJS.SHA1和一些在線SHA1生成工具的輸出。 比較是正確的。 我不是這方面的專家。 如果您能解釋得更多,將會更有幫助。
我設法用另一種方式來做。 我的應用程序是基於cordova的應用程序。 因此生成了sha1並從java和objC對其進行了編碼,並使用cordova插件對其進行了調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.