我的问题有点毛茸茸,我可能问错了问题,所以请多多包涵……
我有一个旧的 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 编码(有关详细信息,请参阅此处)并存储作为 nvarchar(128) 数据。
但是从存储的 Base64 编码字符串的长度(28 个字符)看来,ASP.NET 成员生成的 SHA1 哈希值只有 20 个字符长,而不是 40 个。从我一直在做的其他一些阅读中,我在想这个与每个字符/字符集/编码或相关的位数有关。
那么有没有办法将 40 个字符的 SHA1 哈希转换为 20 个字符的哈希,然后我可以将其传输到新的 ASP.NET 成员数据表?我现在已经非常熟悉 ASP.NET 成员资格,但我觉得我只是错过了这一块。但是,可能也知道 Ruby 中的 SHA1 和 .NET 中的 SHA1 不兼容,所以我正在打一场失败的战斗......
提前感谢您的任何见解。