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))