1

Javaを使用してSHA-1チェックサムを生成するコードを書いています。このリンクhttp://code.wikia.com/wiki/SHA_checksumを参照しました。私のJavaコードは以下の通りです:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHAHashing{

    public static void main(String[] args)throws Exception{
            String password = "ABC0010|txnpassword|0|Test Reference|1.00|20110616221931";
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.update(password.getBytes("UTF-8")); 
            System.out.println("Converting SHA digest output to Hex String : "+byteArrayToHexString(SHAsum(password.getBytes("UTF-8"))));
            System.out.println("Converting md.digest output to Hex String  : "+byteArrayToHexString(md.digest()));
    }

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

    public static String byteArrayToHexString(byte[] b) {
         String result = "";
         for (int i=0; i < b.length; i++) {
             result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
         }
         return result;
    }
}

上記の出力は次のとおりです。

SHA ダイジェスト出力を 16 進文字列に変換: 7871d5c9a366339da848fc64cb32f6a9ad8fcadd
md.digest 出力を 16 進文字列に変換:7871d5c9a366339da848fc64cb32f6a9ad8fcadd

入力文字列があります:"ABC0010|txnpassword|0|Test Reference|1.00|20110616221931" 対応する出力は:01a1edbb159aa01b99740508d79620251c2f871dフィンガープリントを生成するために参照用に使用しているドキュメントに従ってです。

上記について誰か洞察を提供してください。

4

1 に答える 1

1

これは、参照ドキュメントを含めることが役立つ場合です。この例、次のドキュメントから来ているようです: http://www.securepay.com.au/uploads/Integration%20Guides/SecureFrame_Integration_Guide.pdf

そのドキュメントのセクション 3.3.5「取引金額」では、金額フィールドは「通貨の基本単位」でなければならないと指定されています。その1.00ため、文字列はドルではなくセントである必要があります。

を に変更すると、ドキュメントが期待する SHA-1 サムが得られます1.00100

ただし、それはあなたが報告する金額ではありません。

ドキュメントを再確認し、基になるデータの変換が欠落していないことを確認してください。

于 2012-11-28T12:41:16.897 に答える