我正在尝试使用消息和密钥使我的 Java 程序生成签名。我的 C# 程序应该使用相同的消息和密钥生成相同的令牌。
但是,有些东西不能正常工作,因为生成的令牌不同。
有人可以找出这两个程序之间的区别以及为什么它们不生成匹配的密钥吗?
Java 代码:
this.algorithm = "hmacSHA256";
private static Mac mac;
String message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum id urn";
String secretKey = "5771CC06-B86D-41A6-AB39-9CA2BA338E27";
if( mac == null ) {
mac = Mac.getInstance(algorithm);
SecretKeySpec secret = new SecretKeySpec(secretKey.getBytes("US-ASCII"),
mac.getAlgorithm());
mac.init(secret);
}
this.signature = new String(Base64.encodeBase64(mac.doFinal(message.getBytes("US-ASCII"))));
C#代码:
string message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum id urn";
string secret = "5771CC06-B86D-41A6-AB39-9CA2BA338E27";
secret = secret ?? "";
var encoding = new System.Text.ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(secret);
byte[] messageBytes = encoding.GetBytes(message);
using (var hmacsha256 = new System.Security.Cryptography.HMACSHA256(keyByte))
{
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
return Convert.ToBase64String(hashmessage);
}