经过 24 小时的编程,我终于破解了,我想制作一个 C# WindowsForm 应用程序,它可以像 hashcalc 一样向您显示哈希十六进制字符串输入的值。即使在谷歌搜索之后,我也只能将其用于文本字符串输入。To demonstrate, the input 060201080808040602040909080909003583150369840500 should output d8f6b336a4df3336bf7de58a38b1189f6c5ce1e8 and not a6879cb4510b18e8f41b3491ce474fd2ff9e2979 Also this is for SHA1 Hashing so keep it only at that, Thanks!
问问题
2481 次
4 回答
1
为此090505050509050009080003000605003569190380108300
我有3b8d562adb792985a7393a6ab228aa6e7526410a
,没有3b8d562adb792985a7393a6ab228aa6e752641a
我认为最后一个字节是错误的。
于 2013-09-21T20:24:17.647 回答
0
private void button1_Click(object sender, EventArgs e)
{
string input= "060201080808040602040909080909003583150369840500";
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
byte[] hash = sha1.ComputeHash(ConvertHexStringToByteArray(input));
string delimitedHexHash = BitConverter.ToString(hash);
string hexHash = delimitedHexHash.Replace("-", "");
MessageBox.Show(hexHash);
}
public static byte[] ConvertHexStringToByteArray(string hexString)
{
if (hexString.Length % 2 != 0)
{
throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString));
}
byte[] HexAsBytes = new byte[hexString.Length / 2];
for (int index = 0; index < HexAsBytes.Length; index++)
{
string byteValue = hexString.Substring(index * 2, 2);
HexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
}
return HexAsBytes;
}
于 2013-10-29T01:34:32.883 回答
0
您需要导入命名空间:
using System.Security.Cryptography
并打电话
var hash = new SHA1CryptoServiceProvider().ComputeHash(inputBytes);
产生哈希。
如果您的问题是将十六进制字符串转换为字节,这里有一个完整的示例,展示了如何解析输入和格式化输出:
var input = "060201080808040602040909080909003583150369840500";
// parse the input into a byte[]
var inputBytes = Enumerable.Range(0, input.Length/2)
.Select(i => input.Substring(i*2, 2))
.Select(s => byte.Parse(s, NumberStyles.HexNumber))
.ToArray();
var hash = new SHA1CryptoServiceProvider().ComputeHash(inputBytes);
var outputHexString = string.Join(" ",
hash.Select(b => b.ToString("X")).ToArray());
Console.WriteLine(outputHexString);
这是它的工作原理:http: //ideone.com/BE7ecU
于 2013-09-16T13:24:15.033 回答
0
我想我真的不明白你的问题。您可以散列任何输入并以任何您想要的方式输出。为此,您可能会使用带有您选择的编码的 Encoding 类并调用 GetBytes() 方法。然后你取 SHA1 类并让它计算哈希值。对于用户文本,您告诉字符串类对数字使用十六进制格式。这不仅适用于 SHA1 类;)
于 2013-09-16T13:12:02.977 回答