【发布时间】:2018-12-28 22:28:26
【问题描述】:
我目前正在用 C# 编写一个程序。当我尝试将字符串从 sha256 传递到 base64 时,我意识到它没有被正确编码。
例如,给定 sha256
cd69ef0284bba33bc0b320e6479c2da2d411a5e46af060d8639f0e0bfc24f26d
我的代码产生
Y2Q0Q2OUVGMDI4NEJCQTMzQkMwQjMyMEU2NDc5QzJEQTJENDExQTVFNDZBRjA2MEQ4NjM5RjBFMEJGQzI0RjI2RA==
我期望得到的是
zWnvAoS7ozvAsyDmR5wtotQRpeRq8GDYY58OC/wk8m0
为什么编码的字符串如此不同,我错过了什么?
这是我正在使用的代码
string t1 ="cd69ef0284bba33bc0b320e6479c2da2d411a5e46af060d8639f0e0bfc24f26d";
var t2= System.Text.Encoding.GetEncoding(1252).GetBytes(t1);
string t3= System.Convert.ToBase64String(t2);
【问题讨论】:
-
zWnvAoS7ozvAsyDmR5wtotQRpeRq8GDYY58OC/wk8m0的期望值从何而来?如果您向我们展示您的源代码,将会有所帮助。 -
@ Griswald_911我从我的代码得到这个 'Y2Q0Q2OUVGMDI4NEJCQTMzQkMwQjMyMEU2NDc5QzJEQTJENDExQTVFNDZBRjA2MEQ4NjM5RjBFMEJGQzI0RjI2RA ==' 我希望得到这个 'zWnvAoS7ozvAsyDmR5wtotQRpeRq8GDYY58OC / wk8m0' SPAN>
-
@Pedro 你是如何得到
zWnvAoS7ozvAsyDmR5wtotQRpeRq8GDYY58OC/wk8m0的值的?你首先要计算什么? -
他的预期结果可以反转:
BitConverter.ToString(Convert.FromBase64String("zWnvAoS7ozvAsyDmR5wtotQRpeRq8GDYY58OC/wk8m0" + "=")).Replace("-", String.Empty).ToLowerInvariant(),你会得到他输入的 SHA256 值。因此,@daisy-shipton 的猜测可能是正确的,他是如何得到预期结果的。 -
@Pedro:请参阅下面 Daisy 的回答。正如她解释的那样,您真的只想从 SHA-256 哈希中获取原始二进制文件,并将其直接传递给接受
byte[]的System.Convert.ToBase64String方法。当您到达t1的字符串值时,您已经走得太远了。换句话说,最好将散列编码为 base64,而不是该散列的字符串或十六进制表示。