将字符串值转换为 md5
convert string value to md5
我正在尝试将字符串转换为 md5
那是我所做的:
public static string MD5Hash(string input)
{
StringBuilder hash = new StringBuilder();
MD5CryptoServiceProvider md5provider = new MD5CryptoServiceProvider();
byte[] bytes = md5provider.ComputeHash(new UTF8Encoding().GetBytes(input));
for (int i = 0; i < bytes.Length; i++)
{
hash.Append(bytes[i].ToString("x2"));
}
return hash.ToString();
}
我在 MD5Hash("MyCode") 中测试时返回的代码:6403df8223bf310152ad235731e79902(32 个字符)
但是我数据库中的 md5 是
0x6403DF8223BF310152AD235731E79902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 (64 char)
它缺少开头的 "0X" 和 "zeros"结尾
MD5 算法的哈希大小为 128 位。
ComputeHash 方法的 MD5 class return 将散列作为 16 字节的数组。请注意,某些 MD5 实现会生成 32 个字符的十六进制格式哈希。
所以你必须检查数据库为什么你会得到额外的字符?
请注意,MyCode
的正确 MD5 值为 8e995273698f53088fe2ad4a0888d213
下面生成MD5的代码。
public static string GenerateMD5(string input)
{
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
这对我有用 -
public static string MD5Hash(string text)
{
MD5 md5 = new MD5CryptoServiceProvider();
//compute hash from the bytes of text
md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text));
//get hash result after compute it
byte[] result = md5.Hash;
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
//change it into 2 hexadecimal digits
//for each byte
strBuilder.Append(result[i].ToString("x2"));
}
return strBuilder.ToString();
}
试试这个
public static string Md5Hash(string text)
{
using (var md5 = new MD5CryptoServiceProvider())
{
using (var tds = new TripleDESCryptoServiceProvider())
{
tds.Key = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(encryptionKey));
tds.Mode = CipherMode.ECB;
tds.Padding = PaddingMode.PKCS7;
using (var transform = tds.CreateEncryptor())
{
byte[] textBytes = UTF8Encoding.UTF8.GetBytes(text);
byte[] bytes = transform.TransformFinalBlock(textBytes, 0, textBytes.Length);
return Convert.ToBase64String(bytes, 0, bytes.Length);
}
}
}
}
根据您的示例,在您的数据库中生成 64 个字符的字符串类似于:
public static string MD5Hash(string input)
{
using (var md5 = new MD5CryptoServiceProvider())
return string.Concat("0x",
BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(input)))
.Replace("-", string.Empty).PadRight(62, '0'));
}
在这种情况下,我不会将函数命名为 MS5Hash
,如您所见,数据库字符串是串联的字符串,而 MD5 哈希只是每个字符串的中间部分。
我正在尝试将字符串转换为 md5 那是我所做的:
public static string MD5Hash(string input)
{
StringBuilder hash = new StringBuilder();
MD5CryptoServiceProvider md5provider = new MD5CryptoServiceProvider();
byte[] bytes = md5provider.ComputeHash(new UTF8Encoding().GetBytes(input));
for (int i = 0; i < bytes.Length; i++)
{
hash.Append(bytes[i].ToString("x2"));
}
return hash.ToString();
}
我在 MD5Hash("MyCode") 中测试时返回的代码:6403df8223bf310152ad235731e79902(32 个字符)
但是我数据库中的 md5 是 0x6403DF8223BF310152AD235731E79902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 (64 char)
它缺少开头的 "0X" 和 "zeros"结尾
MD5 算法的哈希大小为 128 位。
ComputeHash 方法的 MD5 class return 将散列作为 16 字节的数组。请注意,某些 MD5 实现会生成 32 个字符的十六进制格式哈希。
所以你必须检查数据库为什么你会得到额外的字符?
请注意,MyCode
的正确 MD5 值为 8e995273698f53088fe2ad4a0888d213
下面生成MD5的代码。
public static string GenerateMD5(string input)
{
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
这对我有用 -
public static string MD5Hash(string text)
{
MD5 md5 = new MD5CryptoServiceProvider();
//compute hash from the bytes of text
md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text));
//get hash result after compute it
byte[] result = md5.Hash;
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
//change it into 2 hexadecimal digits
//for each byte
strBuilder.Append(result[i].ToString("x2"));
}
return strBuilder.ToString();
}
试试这个
public static string Md5Hash(string text)
{
using (var md5 = new MD5CryptoServiceProvider())
{
using (var tds = new TripleDESCryptoServiceProvider())
{
tds.Key = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(encryptionKey));
tds.Mode = CipherMode.ECB;
tds.Padding = PaddingMode.PKCS7;
using (var transform = tds.CreateEncryptor())
{
byte[] textBytes = UTF8Encoding.UTF8.GetBytes(text);
byte[] bytes = transform.TransformFinalBlock(textBytes, 0, textBytes.Length);
return Convert.ToBase64String(bytes, 0, bytes.Length);
}
}
}
}
根据您的示例,在您的数据库中生成 64 个字符的字符串类似于:
public static string MD5Hash(string input)
{
using (var md5 = new MD5CryptoServiceProvider())
return string.Concat("0x",
BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(input)))
.Replace("-", string.Empty).PadRight(62, '0'));
}
在这种情况下,我不会将函数命名为 MS5Hash
,如您所见,数据库字符串是串联的字符串,而 MD5 哈希只是每个字符串的中间部分。