1

私はJavaでこのアルゴリズムを使用して、パスワードをデータベースに保存しています。アプリケーションをRubyonRailsで書き直したいので、ハッシュされたパスワードを比較するために同じアルゴリズムが必要です。このアルゴリズムに相当する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 =

4

2 に答える 2

2

これを読む前に、ハッシュに関するGregの回答を読んでください。

それで:

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 =

于 2009-09-06T23:32:35.140 に答える
2

先に進む前に、実行していることをやめて、このコーディングホラーの記事を読んでください:おそらくパスワードを誤って保存しています。

ソルトなしのプレーンハッシュを使用してパスワードをエンコードすることは、ハッシュをまったく使用しない場合とほぼ同じくらい悪いことです。

于 2009-09-06T23:23:12.430 に答える