首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HASHBYTES函数用于哈希数据

HASHBYTES函数用于哈希数据
EN

Stack Overflow用户
提问于 2020-07-05 11:14:02
回答 1查看 1.4K关注 0票数 0

我有数据需要散列。我有数字列表来比较散列数字。据我所知,这些数据是用SHA_256进行散列的。

我只有一个输入和输出示例,我需要找出Server中的散列逻辑。

这是原始数字:02229747,这是散列号:4ad54f5b376038f49a44d411e6d551ae4c8dd147c8605a7eec32ba850080b326

我试过使用以下方法,但无法获得相同的结果。

代码语言:javascript
复制
declare @number bigint = 022529747  
DECLARE @HashId varbinary(50) =  HashBytes('SHA2_256', cast(@number as varbinary(50)))
select @HashId
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-05 11:28:26

哈希字节可以接受许多不同的算法作为输入。试一试:

代码语言:javascript
复制
select 
a = hashbytes('MD2', '022529747'),
b = hashbytes('MD4', '022529747'),
c = hashbytes('MD5', '022529747'),
d = hashbytes('SHA', '022529747'),
e = hashbytes('SHA1', '022529747'),
f = hashbytes('SHA2_256', '022529747'),
g = hashbytes('SHA2_512', '022529747')

列f返回要查找的值,因此所使用的算法是SHA2_256。注意,我将数据作为 string (varchar),而不是 integer (Bigint)。E 210。将022529747表示为varchar的字节与表示022529747为bigint的字节非常不同。

背景:

哈希和加密是不同的。

沙代表“安全哈希算法”。它接受一些输入,并生成一个输出哈希。如果输入发生变化,哈希将发生变化(有生日问题的限制)。但你不能倒退。不能获取输出哈希,并将其转换为输入数据。您所能做的最好是尝试每个不同的可能输入,并查看该输入是否生成哈希。看这个3 Blue1Brown视频作说明性解释

沙是一个密码杂凑函数家族,但不要让名字欺骗你。“密码学”并不意味着与“加密”相同。这仅仅意味着很难根据输出来猜测输入数据是什么,因为输出看起来是随机的。有关哈希函数和加密哈希函数之间的区别,请参见这个帖子

AES代表“高级加密标准”。这是对称密钥加密。用AES加密的数据可以解密回原始输入。“对称”部分意味着一个密钥既用于加密,也用于解密(与PGP加密相比较,后者使用不同的密钥进行加密和解密)。

SQL哈希函数可以使用许多不同的算法,但没有一个是可逆的。它们都是散列算法,而不是加密算法。

如果需要在代码中进行加密和解密,则要使用的正确SQL功能是EncryptByKeyDecryptByKey

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62739910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档