Мне нужно подписать сообщение MAC, используя алгоритм SHA-256.У меня есть код для генерации MAC, однако проверка на другом конце не удалась.Мне сказали, что значение, которое я вычисляю, неверно.
Вот мой код
public static byte[] calculateMAC(byte[] _aiOutBufferForMacCalculation, String key) {
try{
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] mac_data=sha256_HMAC.doFinal(_aiOutBufferForMacCalculation);
String result = "";
for (final byte element : mac_data)
{
result += Integer.toString((element & 0xff) + 0x100, 16).substring(1);
}
System.out.println("Result:[" + result + "]");
return mac_data;
} catch (Exception _exception) {
_exception.printStackTrace();
}
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
public static void main(String[] args) {
String key = "7F6D7A688019DC4CA83883F2459E6B389BE99BB63B622A97";
String cadena = "1800990000014303181112190600048430303030303134370029030003483032001148324830303030303135320008143919751D5EB97C";
byte[] data_for_mac = hexStringToByteArray(cadena);
System.out.println(new String(data_for_mac));
byte[]mac = calculateMAC(data_for_mac,key);
}
}
В результате я вижу напечатанное: 0e01a8a96b30ae0a918865d1cef898ea4f96e18680fa9aae4c5d9902090c2f81
ожидаемое значение: 7684024da7fe89029965ac037a1ec94b21479c91cd8495e726fec924e84b0773
Я использовал несколько онлайн-инструментов, которые позволяют вводить шестнадцатеричную строку в качестве inputo для генерации хеша.Результат такой же, как и ожидалось, поэтому я подтвердил, что у моей проблемы.
Я не знаю, что я делаю по-другому или неправильно, кто-нибудь может помочь?Спасибо