C#:String - > MD5 - >十六进制

时间:2009-07-09 07:05:52

标签: c# hash md5

在PHP或Python等语言中,有一些方便的函数可以将输入字符串转换为输出字符串,即输出字符串的HEXed表示。

我觉得这是一个非常常见且有用的任务(密码存储和检查,文件内容的校验和......),但在.NET中,据我所知,你只能处理字节流。

这项工作的功能很容易上传(例如http://blog.stevex.net/index.php/c-code-snippet-creating-an-md5-hash-string/),但我想知道我是否遗漏了某些东西,使用了错误的模式,或者根本就没有这样的东西。 NET。

由于

3 个答案:

答案 0 :(得分:7)

您链接的方法似乎正确,MSDN C# FAQ

上显示的方法略有不同

评论建议您可以使用:

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(string, "MD5");

答案 1 :(得分:5)

是的,你只能使用字节(据我所知)。但是你可以通过遍历它们并做类似的事情来轻松地将这些字节转换为十六进制表示:

myByte.ToString("x2");

您可以使用以下命令获取构成字符串的字节:

System.Text.Encoding.UTF8.GetBytes(myString);

所以可以在几行中完成。

答案 2 :(得分:5)

一个问题是“[字符串]的HEXed表示”的概念。

字符串是一系列字符。这些字符如何表示为单个位取决于编码。 .NET的“原生”编码是UTF-16,但通常使用UTF-8实现更紧凑的表示(同时保留编码任何字符串的能力)。

一旦您选择了合适的编码,就可以使用Encoding.GetBytes来获取字符串的编码版本 - 但 选择要做的事实就是那里的原因是不是很多API直接从字符串到base64 / hex或直接在字符串上执行加密/散列。存在的任何此类API几乎肯定会执行“编码到字节数组,执行适当的二进制操作,将不透明的二进制数据解码为hex / base64”。

(这让我想知道是否值得编写一个可以采用编码,Func<byte[], byte[]>和输出格式(如hex / base64)的实用程序类,它可以表示应用于任意二进制操作一个字符串。)