SHA1在Java和JavaScript方面有所不同



在JavaScript和Java创建SHA1时面对问题。问题都是不同的。它用于验证客户端请求到Web服务器。这意味着客户端将基于基于的64个编码的安全密钥发送到服务器,服务器再生相同的密钥并等同于两个相同。请找到以下代码,以在客户端和服务器中生成秘密密钥。服务器

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.

value 1,value1,server_key将在客户端和服务器中可用。我们面临的问题是,客户端和服务器中生成的SHA1都不匹配。我知道这个问题是在Java中使用getBytes()和JavaScript中使用字符串值来生成SHA1。cryptojs.sha1不支持bytearray作为参数。我们无法更改服务器代码,因为许多客户端应用程序使用。任何帮助将不胜感激。

在Java中 ->

byte[] result = mDigest.digest(input.getBytes()); 

和javascript->

var hash = CryptoJS.SHA1(input);. 

我相信这是问题所在。在Java中,参数是一个bytearray,并且输出也是一个bytearray。但是在JavaScript中,参数为var(string),返回也为var(string)。我还将Cryptojs.sha1的输出与一些在线SHA1生成工具进行了比较。比较是正确的。我不是这个领域的专家。如果您可以解释更多,它将更有帮助。

我以另一种方式将其管理。我的应用程序是基于科尔多瓦的应用程序。因此生成了SHA1并从Java和OBJC编码它,并使用Cordova插件调用了它。

最新更新