C# MD5加密 2位宽度导致少了个0/多了个0 Base64加密

MD5加密方法:

public static string calculateDigest(string content, string secretkey)
{
  string toSignContent = content + secretkey;
  MD5 md5 = MD5.Create();
  string md5Str = "";
  byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(toSignContent));
  // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
  for (int i = 0; i < s.Length; i++)
  {
    // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
    // 写X2,结果是35beb18e154178d35f40ecc3c204e370
    // 写X,结果是35beb18e154178d35f40ecc3c24e370,少了个0
    // 原因:这个是很常见的错误,你字节转换成字符串的时候要保证是2位宽度啊,某个字节为0转换成字符串的时候必须是00的,否则就会丢失位数啊。不仅是0,1~9也一样。

    // 参考:https://www.cnblogs.com/zuochanzi/p/7206083.html

    md5Str = md5Str + s[i].ToString("X2");
  }

 

  return Convert.ToBase64String(Encoding.GetEncoding("utf-8").GetBytes(md5Str.ToLower()));
}

 

Base64加密方法:
//此处注意:md5Str大写和小写,经过Base64加密出的结果是不一样的

Convert.ToBase64String(Encoding.GetEncoding("utf-8").GetBytes(md5Str))

posted @ 2021-06-20 21:04  剑存古风  阅读(129)  评论(0编辑  收藏  举报