.Net HMAC 和 base64 编码问题
.Net HMAC and base64 Encoding Issue
我正在尝试使用 secret
的秘密和 foo
的有效负载来创建 base64 编码的 HMAC SHA512 哈希。我无法让我的 .NET 代码产生正确的值。我想知道编码是否是根本问题。
代码:
UTF8Encoding encoding = new UTF8Encoding();
HMACSHA512 hmac = new HMACSHA512(encoding.GetBytes("secret")); // init the HMAC hash with "secret" as a byte array
byte[] hash = hmac.ComputeHash(encoding.GetBytes("foo")); // hash the payload
String result = Convert.ToBase64String(hash); // Base64 encode the payload
不正确的散列和 base64 结果:
gt9xA96Ngt5F4BxF/mQrXRPGwrR97K/rwAlDHGZcb6Xz0a9Ol46hvekUJmIgc+vqxho0Ye/UZ+CXHHiLyOvbvg==
预期的哈希和 base64 结果:
ODJkZjcxMDNkZThkODJkZTQ1ZTAxYzQ1ZmU2NDJiNWQxM2M2YzJiNDdkZWNhZmViYzAwOTQzMWM2NjVjNmZhNWYzZDFhZjRlOTc4ZWExYmRlOTE0MjY2MjIwNzNlYmVhYzYxYTM0NjFlZmQ0NjdlMDk3MWM3ODhiYzhlYmRiYmU=
由于第二个版本只是十六进制表示的 Base64,因此您需要先将字节数组转换为十六进制,然后再将字符串的 Base64 ASCII 版本转换为十六进制。
步骤:
- How do you convert Byte Array to Hexadecimal String, and vice versa?
- C# Convert a string to ASCII bytes
- Conversion from byte array to base64 and back
我正在尝试使用 secret
的秘密和 foo
的有效负载来创建 base64 编码的 HMAC SHA512 哈希。我无法让我的 .NET 代码产生正确的值。我想知道编码是否是根本问题。
代码:
UTF8Encoding encoding = new UTF8Encoding();
HMACSHA512 hmac = new HMACSHA512(encoding.GetBytes("secret")); // init the HMAC hash with "secret" as a byte array
byte[] hash = hmac.ComputeHash(encoding.GetBytes("foo")); // hash the payload
String result = Convert.ToBase64String(hash); // Base64 encode the payload
不正确的散列和 base64 结果:
gt9xA96Ngt5F4BxF/mQrXRPGwrR97K/rwAlDHGZcb6Xz0a9Ol46hvekUJmIgc+vqxho0Ye/UZ+CXHHiLyOvbvg==
预期的哈希和 base64 结果:
ODJkZjcxMDNkZThkODJkZTQ1ZTAxYzQ1ZmU2NDJiNWQxM2M2YzJiNDdkZWNhZmViYzAwOTQzMWM2NjVjNmZhNWYzZDFhZjRlOTc4ZWExYmRlOTE0MjY2MjIwNzNlYmVhYzYxYTM0NjFlZmQ0NjdlMDk3MWM3ODhiYzhlYmRiYmU=
由于第二个版本只是十六进制表示的 Base64,因此您需要先将字节数组转换为十六进制,然后再将字符串的 Base64 ASCII 版本转换为十六进制。
步骤:
- How do you convert Byte Array to Hexadecimal String, and vice versa?
- C# Convert a string to ASCII bytes
- Conversion from byte array to base64 and back