经过24小时的编程后,我终于破解了,我想制作一个C#WindowsForm应用程序,它向您展示散列十六进制字符串输入的值,如hashcalc。 我只能使用它来输入文本字符串,即使用Google搜索它。 为了演示,输入060201080808040602040909080909003583150369840500应该输出d8f6b336a4df3336bf7de58a38b1189f6c5ce1e8 而不是a6879cb4510b18e8f41b3491ce474fd2ff9e2979 另外这是SHA1散列所以保持它只是在那,谢谢!从C#中的十六进制/二进制字符串计算SHA1
0
A
回答
0
我觉得我不太了解你的问题。你可以任意散列任何输入和输出。为了达到这个目的,你很可能使用Encoding类和你选择的编码并调用GetBytes()方法。然后,您采取SHA1类并让它计算散列值。而对于用户文本,您可以告诉字符串类使用十六进制数字格式。这不仅适用于SHA1类;)
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
1
对于这090505050509050009080003000605003569190380108300
我有3b8d562adb792985a7393a6ab228aa6e7526410a
,而不是3b8d562adb792985a7393a6ab228aa6e752641a
我认为最后一个字节是错误的。
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;
}
相关问题
- 1. SHA1哈希十六进制字符串
- 2. 十六进制字符串到二进制字符串
- 3. 二进制字符串到十六进制字符串java
- 4. Ruby:十六进制字符串到二进制字符串
- 5. C++长十六进制字符串转换为二进制
- 6. 将二进制长字符串转换为十六进制c#
- 7. 计算十六进制字符串的二进制补码校验和
- 8. Python从二进制字符串转换为十六进制
- 9. 从二进制转换为十六进制字符串
- 10. Javascript - 十进制字符串的十六进制字符串
- 11. 在C++中将十六进制十六进制字符标记为十进制
- 12. 十六进制,八进制,二进制到十进制(C++)
- 13. 将二进制字符串转换为十六进制字符串C
- 14. 将十六进制字符串转换为二进制字符串,显示所有4位十六进制值
- 15. 二进制字符串为十六进制的Java
- 16. 转换十六进制字符串为二进制的SQL Server
- 17. 从十六进制字符
- 18. 将二进制十进制转换为十六进制,二进制和八进制字符串
- 19. 从十六进制字符串转换为十六进制字符数组
- 20. 转换十六进制字符串十六进制值
- 21. 将字符串转换为十六进制到十六进制
- 22. 十六进制字符串到十六进制整数
- 23. python字符串与十六进制转义十六进制值
- 24. 十六进制串&十六进制
- 25. INT为十六进制字符串(C++)
- 26. C#十六进制字符串问题
- 27. 十六进制字符到实际十六进制字符的字符串
- 28. C++将十六进制字符串转换为十六进制char *十六进制数字
- 29. 在Perl中使用十六进制字符串的SHA1 HMAC
- 30. 将二进制字符串显示为十六进制DB2
所以你在SHA1中成功地散列了一个字符串,但实际上是想散列由你所拥有的十六进制字符串表示的“字节数组”? – olydis
如果是这样的话,看看http://stackoverflow.com/questions/311165/how-do-you-convert-byte-array-to-hexadecimal-string-and-vice-versa – olydis