从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.
值value1,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),return也是var(string)。我还将CryptoJS.SHA1的输出与一些在线SHA1生成工具进行了比较。比较是真的。我不是这方面的专家。如果你能解释得更多,那将会更有帮助。
答案 0 :(得分:0)
我以另一种方式管理它。我的应用程序是基于cordova的应用程序。因此生成了sha1并使用java和objC对其进行编码,并使用cordova插件调用它。