java - 如何将 Java 中的此 SHA 函数转换为 Ruby 中的等效函数?

标签 java ruby sha1 encryption

我在 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/

相关文章:

java - 如何同时评估值(value)

ruby-on-rails - 如何在不重复 nil 检查的情况下避免嵌套哈希中缺少元素的 NoMethodError?

Ruby Hash 其键是对象的函数?

javascript - jsSHA、CryptoJS 和 OpenSSL 库给出不同的结果

git - Git 如何计算文件哈希值?

java - 即使输入新值后,文本框的值属性仍保留旧值

Java-XML 数据解析

ruby-on-rails - Ruby on Rails:ActiveRecord::NotNullViolation:SQLite3::ConstraintException:NOT NULL 约束失败:尝试运行单元测试时出错

security - TLS 1.2 支持 SHA 1 证书

java - 使用Java 8 Streams完成消除循环