2

背景については、この質問を参照してください。

Java と PHP で SHA-256 のようなアルゴリズムを使用したハッシュは、指定された文字列が英語の場合は同じ結果を生成しますが、入力が英語以外の言語 (たとえば中国語など) の場合、2 つの言語で同じ結果を生成するにはどうすればよいですか? )?

ジャワ

public static String encodePassword(String password) {
    try {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hash = digest.digest(password.getBytes("UTF-8")); //I've tried messing around with the encoding
        String result = "";
        for(int i : hash) {
            result += String.format("%02x", 0xff & i);
            }
        return result;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

PHP

PHP の場合、次のhash関数を使用します。

hash("sha256", $password);

出力(入力を国とする)

ジャワ

エンコーディングを UTF-8 に設定:d1566afa505af0f03b9156d0a9a518a25c2d4568b095ef4ee2dca7fcbb6c29c9

エンコードを iso-8859-1 に設定:8a8de823d5ed3e12746a62ef169bcf372be0ca44f0a1236abc35df05d96928e1

PHP

e1c8436bc8529d791d58c74fefa160dfd678ca8db8f879b8392a42be84f78db3

4

1 に答える 1

0

これは役立つかもしれません。

public static String SHA(String text)
        throws NoSuchAlgorithmException, UnsupportedEncodingException {
    MessageDigest md;
    md = MessageDigest.getInstance("SHA-256");
    byte[] md5 = new byte[64];
    md.update(text.getBytes("iso-8859-1"), 0, text.length());
    md5 = md.digest();
    return convertedToHex(md5);
}
于 2013-09-11T05:38:43.157 に答える