我在Java中有这个算法来存储数据库中的密码。我想在Ruby on Rails中重写我的应用程序,所以我需要使用相同的算法来比较散列密码。这个算法的Ruby等价物是什么?如何将Java中的SHA函数转换为Ruby中的等效函数?
public static String encrypt(String password) {
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA");
md.update(password.getBytes("UTF-8")); // step 3
byte raw[] = md.digest(); // step 4
String hash = (new BASE64Encoder()).encode(raw); // step 5
return hash; // step 6
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
只是用于测试目的,“teste123”密码在我的Java版本生成此哈希: PQ87ndys7DDEAIxeAw5sE6R4y08 =
我用Base64.b64encode Digest :: SHA1.digest('my password')得到一个“\ n”: =>“ovj3 + hlaCAoipokEHaqPIET58zY = \ n” – 2009-09-06 23:56:05
这是严重的问题吗?这不像\ n是一个有效的Base64字符;你可以去掉它,是吗? – 2009-09-07 01:52:12
require'digest/sha1' require'base64' Base64.b64encode(Digest :: SHA1.digest('my password'))。chomp – Anko 2009-09-07 02:19:44