java - 使用 java 的 SHA 1 校验和输出与给定示例不匹配

标签 java cryptography sha1

我正在编写一个代码来使用 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;
    }
}

上面的输出是:

Converting SHA digest output to Hex String : 7871d5c9a366339da848fc64cb32f6a9ad8fcadd
Converting md.digest output to Hex String : 7871d5c9a366339da848fc64cb32f6a9ad8fcadd

我有一个输入字符串:“ABC0010|txnpassword|0|测试引用|1.00|20110616221931” 其相应的输出是: 01a1edbb159aa01b99740508d79620251c2f871d 根据我用来引用生成指纹的文档。

任何人都可以提供对上述内容的见解吗?

最佳答案

在这种情况下,包含引用文档会很有帮助。该示例似乎可能来自此文档:http://www.securepay.com.au/uploads/Integration%20Guides/SecureFrame_Integration_Guide.pdf

该文档第 3.3.5 节“交易金额”指定金额字段必须采用“货币基本单位”。因此,字符串中的 1.00 需要以美分为单位,而不是美元。

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

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

重新检查您的文档并验证您没有错过基础数据的转换。

关于java - 使用 java 的 SHA 1 校验和输出与给定示例不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597969/

相关文章:

swift - 如何在 Swift 中使用 SHA1 散列 NSString?

c# - 如何在数据库中存储散列密码

java - 如何使用自签名证书运行 Java HTTP 服务器并信任浏览器?

java - htc android 应用程序的逆向工程期间

php - 阻止自动网页内容收集器/爬虫

ssl - 在 SSL 连接中禁用弱密码

php - 在 PHP 中测试字符串是否为 sha1

java - 覆盖 Android 中的上下文菜单颜色

java - 在非主类中创建PApplet

Java - 使用 RSA key 加密