我有一个char(32)类型的列,我想存储一个MD5哈希键.问题是我使用SQL来使用HashBytes()函数更新现有记录,该函数创建了类似的值
:›=k! ©úw"5Ýâ‘<\
Run Code Online (Sandbox Code Playgroud)
但是,当我通过.NET进行插入时,它会通过as来实现
3A9B3D6B2120A9FA772235DDE2913C5C
Run Code Online (Sandbox Code Playgroud)
我需要做些什么来使这些匹配?是编码吗?
HashKey不是SQL函数,你的意思是HASHBYTES
?一些实际代码会有所帮助.SQL似乎是计算原始二进制哈希并将其显示为ASCII字符.
.NET正在计算哈希值,然后将其转换为十六进制(或者它出现).CHAR(32)不是存储原始二进制数据的好方法,您可能希望使用BINARY类型.
SQL中的示例:
SELECT SUBSTRING(sys.fn_varbintohexstr(HASHBYTES('MD5',0x2040)),3, 32)
Run Code Online (Sandbox Code Playgroud)
和.NET中的一个例子:
using (MD5 md5 = MD5.Create())
{
var data = new byte[] { 0x20, 0x40 };
var hashed = md5.ComputeHash(data);
var hexHash = BitConverter.ToString(hashed).Replace("-", "");
Console.Out.WriteLine("hexHash = {0}", hexHash);
}
Run Code Online (Sandbox Code Playgroud)
这些都会产生相同的价值.(其中0x2040是样本数据).
您可以将十六进制数据存储为CHAR(32),也可以存储为BINARY(16).存储二进制数据的空间效率是将其存储为十六进制的两倍.你不应该做的是将二进制数据存储为CHAR(16).
归档时间: |
|
查看次数: |
3442 次 |
最近记录: |