如何将字节数组(MD5哈希)转换为字符串(36个字符)?

Kee*_*ker 4 .net c# string hash md5

我有一个使用哈希函数创建的字节数组.我想将此数组转换为字符串.到目前为止这么好,它会给我十六进制字符串.

现在我想使用不同于十六进制字符的东西,我想用这36个字符编码字节数组:[az] [0-9].

我该怎么办?

编辑:我之所以这样做,是因为我希望有一个比十六进制字符串更小的字符串.

Jon*_*Jon 6

我将这个任意长度的基本转换函数从这个答案改编为C#:

static string BaseConvert(string number, int fromBase, int toBase)
{
    var digits = "0123456789abcdefghijklmnopqrstuvwxyz";
    var length = number.Length;
    var result = string.Empty;

    var nibbles = number.Select(c => digits.IndexOf(c)).ToList();
    int newlen;
    do {
        var value = 0;
        newlen = 0;

        for (var i = 0; i < length; ++i) {
            value = value * fromBase + nibbles[i];
            if (value >= toBase) {
                if (newlen == nibbles.Count) {
                    nibbles.Add(0);
                }
                nibbles[newlen++] = value / toBase;
                value %= toBase;
            }
            else if (newlen > 0) {
                if (newlen == nibbles.Count) {
                    nibbles.Add(0);
                }
                nibbles[newlen++] = 0;
            }
        }
        length = newlen;
        result = digits[value] + result; //
    }
    while (newlen != 0);

    return result;
}
Run Code Online (Sandbox Code Playgroud)

由于它来自PHP,它可能不是太惯用的C#,也没有参数有效性检查.但是,您可以为它提供一个十六进制编码的字符串,它可以正常工作

var result = BaseConvert(hexEncoded, 16, 36);
Run Code Online (Sandbox Code Playgroud)

它并不完全是你要求的,但将byte[]十六进制编码是微不足道的.

看到它在行动.