我正在编写使用java生成SHA-1校验和的代码。我提到这个链接http://code.wikia.com/wiki/SHA_checksum。我的Java代码是如下:SHA 1的输出使用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
根据文档我正在使用它来生成指纹。
任何人都可以提供对上述请求的见解。
您应该将字节数组转换为十六进制字符串。请参阅http://stackoverflow.com/a/4895572/130224 – reprogrammer
嗨重编程器,根据您的指示我修改了我的代码如下。但它仍然没有达到预期的产出。请使用测试字符串来产生结果。 –
当它们都调用相同的方法时,md.digest()如何产生与方法SHAsum()不同的结果? –