我正在寻找在java中实现hmac-sha1的解决方案,这将给出与rfc2202文档中描述的输出相同的输出。 https://tools.ietf.org/html/rfc2202.html(3。HMAC-SHA-1的测试用例)
我试着编写一些代码,但我还远没有解决方案。最后我在这里找到了函数:https://stackoverflow.com/a/8396600并且它在rfc2202的测试用例2中为我工作,其中key =" Jefe"和数据="你什么都不想要什么?"我需要更多的输入作为字节数组,所以我改变它,因为它在下面,但它没有给我正确的摘要。那么我需要做些什么来使这个代码工作?我想它是字节数组的东西,但我可能不熟悉java并且没有任何想法。
这就是我给这个函数输入的方法(来自rfc2202的测试用例3):
byte[] key = new byte[20];
Arrays.fill(key, (byte) 10);
byte[] data = new byte[50];
Arrays.fill(data, (byte) 0xdd);
System.out.println(Prf.hmacsha1Digest(data, key));
功能代码:
public static String hmacsha1Digest(byte[] msg, byte[] keyin) throws InvalidKeyException {
String digest = null;
String algo = "HmacSHA1";
try {
SecretKeySpec key = new SecretKeySpec(keyin, algo);
Mac mac = Mac.getInstance(algo);
mac.init(key);
byte[] bytes = mac.doFinal(msg);
StringBuffer hash = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
hash.append('0');
}
hash.append(hex);
}
digest = hash.toString();
} catch (InvalidKeyException e) {
} catch (NoSuchAlgorithmException e) {
}
return digest;
}
答案 0 :(得分:2)
测试用例3的关键是错误的。它应该是:
byte[] key = new byte[20];
Arrays.fill(key, (byte) 0xaa);