gpt4 book ai didi

C#:如何生成短的MD5码?

转载 作者:IT王子 更新时间:2023-10-29 04:32:27 24 4
gpt4 key购买 nike

当我使用 MD5 加密对 23 进行加密时,我得到了 37693cfc748049e45d87b8c7d8b9aacd 这个 32 字符长的字符串,对于 23,它始终是静态的。

我想要相同类型的机制,但应该生成 18 个或更少(如:122ff1e4883358b6)个字符的长字符串,而不是 32 个。

我如何在 C# 中做到这一点,在 C# 中是否有更短版本的 MD5??

最佳答案

我喜欢@RichieHindle 的回答。但是,如果您希望丢失更少的保真度(从而降低冲突风险),您可以采用 MD5 哈希返回的 128 位值,并使用 ASCII85 对其进行编码。 (也称为 Base85 编码),而不是基于十六进制的编码。这将为您提供 20 个字节的整个散列(这比您想要的多,但您可以砍掉 2 个字节,这比使用十六进制编码删除 32 个字节中的 14 个损失要少得多)。

编辑:Prashant 说 20 个字符就足够了,并要求提供示例代码:

从 MD5.ComputeHash 调用中获取 MD5 哈希后,您可以使用 Jeff Atwood's ASCII85 encoder :

MD5 m = MD5.Create();
byte[] hash = m.ComputeHash(System.Text.Encoding.ASCII.GetBytes("23"));
Ascii85 encoder = new Ascii85();
encoder.EnforceMarks = false;
string hash85 = encoder.Encode(hash);
Console.Out.WriteLine(hash85);

产量

2ebDPFFZsD?&,r1fX\$,

所以你可以只使用hash85encoder.EnforceMarks 确保编码不包含一些与 ASCII85 关联的典型前缀和后缀。

关于C#:如何生成短的MD5码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1251463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com