ASP.NETアプリケーションからRubyonRailsアプリケーションに転送するユーザーの大規模なデータベース(〜200,000)があります。すべてのユーザーにパスワードのリセットを依頼したくないので、RubyでC#パスワードハッシュ関数を再実装しようとしています。
古い関数は次のとおりです。
public string EncodePassword(string pass, string saltBase64)
{
byte[] bytes = Encoding.Unicode.GetBytes(pass);
byte[] src = Convert.FromBase64String(saltBase64);
byte[] dst = new byte[src.Length + bytes.Length];
Buffer.BlockCopy(src, 0, dst, 0, src.Length);
Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);
HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
byte[] inArray = algorithm.ComputeHash(dst);
return Convert.ToBase64String(inArray);
}
ハッシュ化されたパスワードとソルトの例は次のとおりです(使用されたパスワードは「password」でした)。
ハッシュ化されたパスワード: "weEWx4rhyPtd3kec7usysxf7kpk ="ソルト: "1ptFxHq7ALe7yXIQDdzQ9Q =="パスワード: "password"
次のRubyコードを使用します。
require "base64"
require "digest/sha1"
password = "password"
salt = "1ptFxHq7ALe7yXIQDdzQ9Q=="
concat = salt+password
sha1 = Digest::SHA1.digest(concat)
encoded = Base64.encode64(sha1)
puts encoded
正しいパスワードハッシュを取得していません(「weEWx4rhyPtd3kec7usysxf7kpk=」ではなく「+BsdIOBN / Vh2U7qWG4e + O13h3iQ =」を取得しています)。誰かが問題が何であるかを見ることができますか?
どうもありがとう
アーフォン