我试图让我的 Java 程序使用消息和 key 生成签名。我的 C# 程序应该使用相同的消息和 key 生成相同的 token 。
但是,由于生成的 token 不同,有些东西无法正常工作。
有人能找出这两个程序之间的区别以及为什么它们没有生成匹配的 key 吗?
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);
}
最佳答案
我可以看到您在 C# 中使用了 HMACSHA256 哈希算法。但是你在 Java 中使用什么算法呢?
关于c# - 从 Java 到 C# 验证(匹配) token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19032046/