我正在编写一个代码来使用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
。
任何人都可以提供有关上述内容的见解。
答案 0 :(得分:1)
这是包含引用文档有用的情况。示例出现,它可能来自此文档:http://www.securepay.com.au/uploads/Integration%20Guides/SecureFrame_Integration_Guide.pdf
该文件第3.3.5节“交易金额”规定金额字段必须为“货币基本单位”。所以你的字符串上的1.00
需要是美分,而不是美元。
如果您将1.00
更改为100
,您将获得该文档所需的SHA-1总和。
但是,这不是您报告的总和。
重新检查您的文档并验证您是否错过了对基础数据的转换。