带有BigInteger的Java hmacSHA256与C不同#
昨天我在使用Java和C进行散列时遇到了麻烦#
我有C语言的代码#
byte[] message = Encoding.UTF8.GetBytes("nick");
byte[] key = Encoding.UTF8.GetBytes("key");
HMACSHA256 hmac = new HMACSHA256(key);
byte[] HmacBytes = hmac.ComputeHash(message);
var result = BitConverter.toString(HmacBytes);
_logger.LogInformation($">>> HMAC: " + result);
这段代码是用Java编写的
byte[] message = "nick".getBytes("UTF-8");
byte[] key = "key".getBytes("UTF-8");
Mac sha256HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec(key, sha256HMAC.getAlgorithm());
sha256HMAC.init(secretKey);
byte[] hmacBytes = sha256HMAC.doFinal(message);
System.out.println(">>> HMAC: " + Utils.bytesToHex(hmacBytes));
这两种代码的结果相同:
D56F32BEB288697DBC666CFCE330750240EE7252A8EACB90F30AE5EC2B6544FE
但是,如果我使用消息和带有BigInteger变量的键,结果最终是不同的
具体
关键的BigInteger变量:
89846755145779207896151571317970843398423995352339053147606272151939451164346932712779779593562801986871149751592444563734853909794103626366575265329402498505873220784518950449894168432504409626921891704398413417881679930643396500380895818666783852587744861261584959964779866038266086235614583684537765854767
消息BigInteger变量:
105278801605955351183032861925660079240049371193037037019863031780531990060755731057393990664319512505978954889835933668032824049054190807125138251307247771506918060803959346902566451812689470408398611041302277800747341495594297701677567604614145074223483256879948522462707345079591319551080307454838134385381
我用C换#
HMACSHA256 hmac = new HMACSHA256(key.toByteArray());
byte[] HmacBytes = hmac.ComputeHash(message.toByteArray());
var result = BitConverter.toString(HmacBytes);
_logger.LogInformation($">>> HMAC: " + result);
Java也是如此
Mac sha256HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec(key.toByteArray(), sha256HMAC.getAlgorithm());
sha256HMAC.init(secretKey);
byte[] hmacBytes = sha256HMAC.doFinal(message.toByteArray());
System.out.println(">>> HMAC: " + Utils.bytesToHex(hmacBytes));
那么在C#中的结果就大不相同了:
ED12EC5908E91F9F9CCE0AB8D703DC31A7DE70B20A39FC5C9A35C9193019C6D2
和Java:
827EE601E601B44BF09D34947A7255EE484596B8C7DBEF283A64EE5C9BDA0CD1
请提示我如何在Java中修复以匹配C#结果。 提前谢谢
共 (0) 个答案