【发布时间】:2013-12-05 00:30:00
【问题描述】:
这是我的问题,
我有这个代码接受带有密码的纯文本并返回 Base64MD5 哈希
private static string GetMd5Base64Pass(string userpwd)
{
MD5 md5 = new MD5CryptoServiceProvider();
return Convert.ToBase64String(md5.ComputeHash(Encoding.ASCII.GetBytes(userpwd)));
}
而且我需要重用它来接受 MD5 字符串哈希并返回 Base64MD5。
我尝试过这样做:
private static string GetMd5Base64PassMD5(string userpwd)
{
MD5 md5 = new MD5CryptoServiceProvider();
return Convert.ToBase64String(Encoding.ASCII.GetBytes(userpwd));
}
但回报完全不同。
已经尝试将字符串转换为字节数组,没有成功。
我需要插入一个 32 位 MD5 的字符串,并以 Base64String 的形式返回。
谢谢
------------------ 已编辑
例子:
密码是123123:
MD5 为:4297f44b13955235245b2497399d7a93
MD5的Base64String为:Qpf0SxOVUjUkWySXOZ16kw==
我需要得到
这个:Qpf0SxOVUjUkWySXOZ16kw==
来自
这个哈希字符串 4297f44b13955235245b2497399d7a93
【问题讨论】:
-
我不明白...当然字符串和它的哈希是完全不同的。 “我需要插入一个 32 位 MD5 的字符串,并以 Base64String 的形式返回。”但实际上 GetMd5Base64PassMD5 就是这样做的。怎么了? “插入”是什么意思?合并它们?
-
它应该这样做,但他们每个人返回的字符串是不同的
-
我添加了一个带有示例的小编辑
-
你得到了你所需要的——你的问题在哪里?
-
您的代码存在一些问题:1) 您默默地破坏了包含非 ASCII 字符的密码。使用
Encoding.Utf8而不是Encoding.ASCII。 2) MD5 不是一个好的密码哈希。密码哈希需要缓慢和加盐。请参阅How to securely hash passwords? 3) 您的发送代码根本没有散列。它直接用Base64对密码进行编码,这与存储明文基本相同 4)32位MD5是什么意思。 MD5 返回 128 位、16 字节、32 个十六进制字符或 44 个 Base64 字符。
标签: c# hash type-conversion base64 md5