我在 Java 中有这个算法来将密码存储在数据库中。我想用 Ruby on Rails 重写我的应用程序,所以我需要相同的算法来比较散列密码。这个算法在 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=
最佳答案
在阅读本文之前,请阅读 Greg's answer关于散列。
然后:
import java.security.*;
import sun.misc.BASE64Encoder;
import java.io.*;
public class test {
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) {
} catch (java.io.UnsupportedEncodingException e) {
}
return null;
}
public static void main(String[] args) {
System.out.println(encrypt("my password"));
}
}
这输出
ovj3+hlaCAoipokEHaqPIET58zY=
在 ruby 中:
require 'digest/sha1'
require 'base64'
Base64.b64encode Digest::SHA1.digest('my password')
也输出
ovj3+hlaCAoipokEHaqPIET58zY=
关于java - 如何将 Java 中的此 SHA 函数转换为 Ruby 中的等效函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386978/