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 摘要输出转换为十六进制字符串:7871d5c9a366339da848fc64cb32f6a9ad8fcadd
将 md.digest 输出转换为十六进制字符串: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你的字符串需要以美分而不是美元为单位。

如果将 更改为1.00100您将获得文档期望的 SHA-1 总和。

但是,这两者都不是您报告的金额。

重新检查您的文档并确认您没有遗漏基础数据的转换。

于 2012-11-28T12:41:16.897 回答