SHA1 Hash on Hex String

2020-07-18 11:08发布

问题:

I'm trying to hash a number, represented by hex string with Java security library. Meaning, If I have the String "AABBCCDD" I want to hash it not as this is an ascii input, which is 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68, but as four bytes - 0xAA, 0xBB, 0xCC, 0xDD. I managed to do it with low values such as "112233445566" (since bytes are signed in Java) but failed with high values.

Does someone know how to implement such thing?

Thanks, Binyamin

回答1:

First convert your hex into byte[] using for example this: Convert a string representation of a hex dump to a byte array using Java?

After it use

byte[] data = hexStringToByteArray(hexData);
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(data, 0, data.length);
byte[] sha1hash = md.digest();


回答2:

Basically you just need to find a hex parser - there are plenty around, with one example here, or Apache Commons Codec for this and other conversions. While Java bytes are indeed signed, you'll get the same bit pattern as if they were unsigned, so they'll have the same way. Unless you're performing your own arithmetic/bit-shifting on byte values, you can usually ignore the fact that bytes are signed in Java.