【问题标题】:Convert from base64 string to long in C#在 C# 中从 base64 字符串转换为 long
【发布时间】:2012-03-01 03:13:32
【问题描述】:

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

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

    return Convert.ToBase64String(hash);
}

如何从编码的base64字符串中得到一个唯一的long,我的意思是相反的操作,然后将其转换为long?

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

提前致谢。

【问题讨论】:

  • Base64 decode in C# or Java 的可能重复项
  • 那是真的相反的操作吗?
  • 在不显着截断散列值的情况下,将 MD5 转换为 long 是行不通的。 MD5 吐出一个 128 位的数字,而 long 是 64 位(目前)。

标签: c# .net string base64 md5


【解决方案1】:

首先,将字符串转换为字节[],

var array = Convert.FromBase64String(base64Hashcode);

然后将字节数组转换为long

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

如前所述,您会被截断。


相反的方向:

var bits = BitConverter.GetBytes(@long);
var base64 = Convert.ToBase64String(bits);

例子:

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

【讨论】:

    【解决方案2】:

    您不能将 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);
    

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多