我正在下面的代码的等效Java代码。但是我可以制作一个返回相同结果的东西 encodedstring 。我可以使用什么Java类来实现相同的结果?

//Set the Hash method to SHA1
HMAC hash;
switch (validation)
{
    case MachineKeyValidation.MD5:
        hash = new HMACMD5();
        break;
    case MachineKeyValidation.SHA1:
    default:
        hash = new HMACSHA1();
        break;
}
//Get the hash validation key as an array of bytes
hash.Key = HexToByte(validationKey);
//Encode the password based on the hash key and
//converts the encrypted value into a string
encodedString = Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password)));
.

提前感谢! :)

有帮助吗?

解决方案

我找到了翻译代码的解决方案。 有两个主要问题。当一个请求A hmacsha1 时,我不是在谈论sha1算法,但是 hmacsha1 。java和C#的编码之间存在差异。我使用的是正确的键,而正确的算法,但编码是不同的。

SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
// The big problem is difference between C# and Java encoding
byte[] rawHmac = mac.doFinal(data.getBytes("UTF-16LE"));
result = new String(Base64.encode(rawHmac));
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top