私の問題は少し毛深いです、そして私は間違った質問をしているかもしれません、それで私に耐えてください...
メンバーシップシステムのユーザーパスワードとソルトを保存するレガシーMySQLデータベースがあります。これらの値は両方とも、Rubyフレームワークを使用してハッシュされています-大まかに次のようになります。
hashedsalt = Digest :: SHA1.hexdigest( "-#{Time.now.to_s}-#{login}-")
hashedpassword = Digest :: SHA1.hexdigest( "#{hashedsalt}:#{password}")
したがって、両方の値はMySQLに40文字の文字列(varchar(40))として格納されます。
次に、これらすべてのユーザーを、SQLServerデータベースを使用する新しいWebサイトのASP.NETメンバーシップフレームワークにインポートする必要があります。ASP.NETメンバーシップを構成する方法では、ユーザーパスワードとソルトもSHA1ハッシュとしてメンバーシップデータベース(テーブルaspnet_Membership)に保存され、Base64でエンコードされ(詳細はこちらを参照)、保存されることを理解しています。 nvarchar(128)データとして。
しかし、格納されているBase64でエンコードされた文字列の長さ(28文字)から、ASP.NETメンバーシップが生成するSHA1ハッシュの長さは40文字ではなく20文字しかないようです。文字/文字セット/エンコーディングまたは関連するものごとのビット数と関係があります。
では、40文字のSHA1ハッシュを20文字のハッシュに変換して、新しいASP.NETメンバーシップデータテーブルに転送する方法はありますか?私は今ではASP.NETメンバーシップにかなり精通していますが、この1つが欠けているように感じます。ただし、RubyのSHA1と.NETのSHA1には互換性がないこともわかっている可能性があるため、負け戦を戦っています...
洞察を事前に感謝します。