0

パスワードを暗号化する次のコードがありますが、それをデコードしようとすると、期待される結果が得られません。ここにコードがあります。

BASE64Encoder encoder = new BASE64Encoder();
String afterhex=toSHA1("mypassword".getBytes());
String encodedBytes = encoder.encodeBuffer(afterhex.getBytes());

public static String toSHA1(byte[] convertme) {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA-1");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return new String(md.digest(convertme));
}

たとえば、エンコードしようとした場合、ジルを取得する必要がありますLQBIF2TS0FSDYtGjaNmC2gl/klw=

元に戻すためのアドバイス:)

4

1 に答える 1

9

ハッシュアルゴリズムは暗号化・復号アルゴリズムではありません。

ハッシングは、可変長の大きなデータ セット (メッセージなど) を固定長の小さなデータ セット (ハッシュ) にマッピングする一方向のプロセスです。長さは、ハッシュ アルゴリズムによって異なります。

また、ハッシュからメッセージへの逆操作を実行することはできません。

同じハッシュを生成するメッセージを見つけることは可能ですが(たとえば、レインボー テーブルを使用します。MD5 のような弱いハッシュ アルゴリズムの場合ははるかに簡単です)、メッセージがハッシュの生成に使用された元のメッセージと同一であるかどうかはわかりません。同じハッシュ値を生成するメッセージ (パスワード)を見つける (推測する) のを防ぐ方法の 1 つは、メッセージ (パスワード) をハッシュするときにソルトを使用することです。

編集

また、 Bruce Schneierの書籍、たとえば " Cryptography Engineering: Design Principles and Practical Applications " (非常に素晴らしく消化しやすい方法で書かれています) をお勧めします。この本では、暗号化とハッシングが非常に詳細に説明されています。

于 2013-01-11T17:09:57.837 に答える