在C#中将base64字符串转换为长整型

4

您好,我有一些使用以下代码生成的字符串:

private static string CalcHashCode(byte[] data)
{
    MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
    Byte[] hash = md5Provider.ComputeHash(data);

    return Convert.ToBase64String(hash);
}

我要如何从编码后的base64字符串中获取一个唯一的长整型,也就是相反的操作,然后将其转换为长整型?

private long CalcLongFromHashCode(string base64Hashcode)
{
  //TODO
}

提前感谢。


可能是Base64解码在C#或Java中的实现的重复问题。 - Sergey Kalinichenko
1
真的 是相反的操作吗? - Humberto
将MD5转换为长整型会显著截断哈希值。MD5生成一个128位的数字,而long只有64位(目前)。 - The Moof
2个回答

9

无法将base-64字符串转换为long(如果不适合,可能会被截断,因为long仅使用8个字节)...

可以将其转换为字节数组(这是“相反”的操作):

 byte[] hash = new byte[] { 65, 66, 67, 68, 69 };
 string string64 = Convert.ToBase64String(hash);
 byte[] array = Convert.FromBase64String(string64);

如果您的数组至少包含8个字节,那么您可以获得您的长整型数值:
long longValue = BitConverter.ToInt64(array, 0);

8

首先,将字符串转换为字节数组,

var array = Convert.FromBase64String(base64Hashcode);

然后将字节数组转换为长整型

var longValue = BitConverter.ToInt64(array, 0);

正如之前提到的,你会遇到截断的问题。
相反地:
var bits = BitConverter.GetBytes(@long);
var base64 = Convert.ToBase64String(bits);

示例:

218433070285205504 : "ADCMWbgHCAM="
long.MaxValue : "/////////38="

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接