Реализация hmac-sha1 на java в соответствии с rfc2202
Я ищу решение, чтобы сделать реализацию hmac-sha1 в java, которая даст мне тот же результат, как это описано в документе rfc2202. https://tools.ietf.org/html/rfc2202.html (3. Тестовые случаи для HMAC-SHA-1)
Я попытался написать какой-то код, но я был далек от решения. Наконец я нашел функцию здесь: https://stackoverflow.com/a/8396600 и это сработало для меня в тестовом случае 2 для rfc2202, где key= "Jefe" и data= " what do ya want for nothing?- Мне нужно больше, чтобы ... есть входные данные в виде байтовых массивов, поэтому я изменил его, как показано ниже, но он не дает мне правильных дайджестов. Итак, что я должен сделать, чтобы заставить этот код работать? Я предполагаю, что это что-то с байтовыми массивами, но я, вероятно, новичок в java и без каких-либо идей.
Вот как я вводил эту функцию (тестовый случай 3 из rfc2202):
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;
}
1 ответ:
Ключ неверен для тестового случая 3. Это должно быть:
byte[] key = new byte[20]; Arrays.fill(key, (byte) 0xaa);
Comments