【发布时间】:2011-01-28 19:34:27
【问题描述】:
我的问题有点毛骨悚然,我可能问错了问题,所以请多多包涵……
我有一个旧的 MySQL 数据库,用于存储会员系统的用户密码和盐。这两个值都已使用 Ruby 框架进行哈希处理 - 大致如下:
哈希盐 = 摘要::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--")
哈希密码 = 摘要::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 不兼容,所以我正在打一场失败的战斗……
提前感谢您的任何见解。
【问题讨论】:
标签: asp.net mysql sql-server ruby sha1