4

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

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

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

谢谢

4

3 回答 3

7

您链接到的方法似乎正确, MSDN C# FAQ上显示的方法略有不同

评论建议您可以使用:

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(string, "MD5");
于 2009-07-09T07:13:10.797 回答
5

是的,您只能使用字节(据我所知)。但是您可以通过循环它们并执行以下操作轻松地将这些字节转换为它们的十六进制表示:

myByte.ToString("x2");

您可以使用以下方法获取组成字符串的字节:

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

所以它可以在几行中完成。

于 2009-07-09T07:09:48.383 回答
5

一个问题是“[a string] 的 HEXed 表示”的概念。

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

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

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

于 2009-07-09T07:19:57.007 回答