C# に SHA-1 で暗号化された値を渡していることを発見した PHP Web サービスがあります。渡されたサンプル データは "8cb2237d0679ca88db6464eac60da96345513964" で、これは "12345" に変換されます。
次のようなコードを使用して、ハッシュ値を「12345」に戻すにはどうすればよいですか
public static string HashCode(string str)
{
string rethash = "";
try
{
System.Security.Cryptography.SHA1 hash = System.Security.Cryptography.SHA1.Create();
System.Text.ASCIIEncoding encoder = new System.Text.ASCIIEncoding();
byte[] combined = encoder.GetBytes(str);
hash.ComputeHash(combined);
rethash = Convert.ToBase64String(hash.Hash);
}
catch (Exception ex)
{
string strerr = "Error in HashCode : " + ex.Message;
}
return rethash;
}
- 編集 *
これは、「8cb2237d0679ca88db6464eac60da96345513964」および「12345」でも機能するRUBYコードです。
require "digest/sha1"
class User
attr_accessor :password
def initialize(password)
@password = hash_password(password)
end
def hash_password(password)
Digest::SHA1.hexdigest(password)
end
def valid_password?(password)
@password == hash_password(password)
end
end
u = User.new("12345")
p u.password # => "8cb2237d0679ca88db6464eac60da96345513964"
p u.valid_password?("not valid") # => false
p u.valid_password?("12345") # => true