加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

asp.net-是否可以将40个字符的SHA1哈希转换为20个字符的SHA1哈希

发布时间:2021-01-24 16:49:00 所属栏目:编程 来源:网络整理
导读:我的题目有点毛躁,也许是我问错了题目,以是请多包容 我有一个旧的MySQL数据库,该数据库存储用户暗码成员体系的盐.这两个值都已行使Ruby框架举办了哈希处理赏罚-大抵如下所示: hashedsalt = Digest::SHA1.hexdigest(#{Time.now.to_s}#{login}) hashedpassword =

我的题目有点毛躁,也许是我问错了题目,以是请多包容…

我有一个旧的MySQL数据库,该数据库存储用户暗码&成员体系的盐.这两个值都已行使Ruby框架举办了哈希处理赏罚-大抵如下所示:

hashedsalt =
Digest::SHA1.hexdigest(“–#{Time.now.to_s}–#{login}–“)

hashedpassword =
Digest::SHA1.hexdigest(“#{hashedsalt}:#{password}”)

因此,两个值在MySQL中都存储为40个字符的字符串(varchar(40)).

此刻,我必要将全部这些用户导入到新网站的ASP.NET成员资格框架中,该网站行使SQL Server数据库.据我相识,以我设置ASP.NET成员身份的方法,用户暗码和盐也作为SHA1哈希存储在成员身份数据库(在表aspnet_Membership中)中,然后举办Base64编码(有关具体信息,请拜见here)并存储作为nvarchar(128)数据.

可是从存储的Base64编码字符串的长度(28个字符)来看,ASP.NET成员身份天生的SHA1散列好像只有20个字符长,而不是40个字符.从其他方面的研究中,我一向在思索与每个字符/字符集/编码或相干内容的位数有关.

那么,是否有某种要领可以将40个字符的SHA1哈希转换为20个字符的哈希,然后可以将其转移到新的ASP.NET成员资格数据表中?到今朝为止,我对ASP.NET成员身份很是认识,可是我感受我只是缅怀这一部门.可是,也也许知道Ruby中的SHA1和.NET中的SHA1是不兼容的,以是我正在一场失败的战斗中…

预先感激您的任何看法.

最佳谜底 Ruby应用措施中的varchar暗示情势好像是“字符串情势的十六进制”,相同于:01AB02EF … 23EF.也就是说,每个字节都用一对字符暗示,它们是该字节的十六进制值,从00到FF.因此,SHA哈希(20个字节)被暗示为40个字符.假如哈希是值(0,1,2,…),则字符串将为000102.ASP base64是现实字节的base64编码.因此,您所必要做的就是获取MySQL字符并获取响应的字节,然后将其编码为base64.

您现实上可以在SQL自己中举办转换:

declare @x varchar(40);
set @x = '000102030405060708090A0B0C0D0E0F10111213';

declare @sql nvarchar(max);
set @sql = N'set @out=0x' + @x;

declare @out varbinary(20);
exec sp_executesql @sql,N'@out varbinary(20) output',@out output;
select @out for xml path('');

可是要强制您的ASP.Net成员资格提供措施行使您建设的Ruby代码的盐腌哈希,与用于存储哈希择要的编码无关,这是一个完全差异的主题.您也许必需重写本身的成员资格提供措施,这时存储编码变得无关紧急,由于您可以按照必要存储它们.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读