【问题标题】:Convert string with HASH MD5 to ToBase64String将带有 HASH MD5 的字符串转换为 ToBase64String
【发布时间】: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


【解决方案1】:
    public static string ConvertHexStringToBase64(string hexString)
    {
        byte[] buffer = new byte[hexString.Length / 2];
        for (int i = 0; i < hexString.Length; i++)
        {
            buffer[i / 2] = Convert.ToByte(Convert.ToInt32(hexString.Substring(i, 2), 16));
            i += 1;
        }
        string res = Convert.ToBase64String(buffer);
        return res;
    }

这会接收 md5 字符串哈希并将其转换为 Base64 Hex

【讨论】:

    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2021-07-22
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多