Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hi,
When trying to connect to an API I have to convert a string to SHA-512. I found a similar question here: https://community.talend.com/t5/Design-and-Development/resolved-String-to-SHA-256/td-p/84300
Although I am not used to java coding, I did get that routine working. It seems the routine is not entirely applicable because my output string is different from the output string the API manual says I should have:
The documentation provides this example string:
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOUspRHGNhIMnZ6say4k3swVMfKER8UYbVOREqq7t71VL89bagEFZW4rSjkTcBg7fVZCWX5ijgQVEX4xfV5lapcCAwEAAQ==GET/authefec3dc1-9a99-4825-9e09-3e7772fc205d1456823909
The documentation says the output string should be:
RK+xg4V0hfgKs27ORFA2mVkXhYIX14zRH/f5bl6KqZB8zxJNgDpC6yHVIlN0uPuDXsR0cfdU9jAM1GdG7yzUSg==
The instruction says: "When extracting the byte array from the string, UTF8 decoding should be used. The SHA512 hash should be Base64 encoded." Probably I need to adjust the routine to decode/encode correctly based on this instruction, I don't know how to apply the necessary changes.
My question: Does anyone get the output string above, if so, how did you succeed?
Thank you
EDIT: edited the title and first sentence because it said SHA-256 instead of SHA-512
PS: I do see the correct output when testing the string on this page: http://approsto.com/sha-generator/ the correct output is show in field 'SHA512 base64 hash'
Update: first I managed to get a hex hash, with this code below.
public static String getHashCodeFromString(String str) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(str.getBytes());
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer hashCodeBuffer = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
hashCodeBuffer.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return hashCodeBuffer.toString();
}
What I needed is base64. I changed the code above, to the final code below, which gave me the expected result:
package routines;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
public class MyRoutineStringToSHA512test7 {
public static String getHashCodeFromString(String str) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(str.getBytes());
byte byteData[] = md.digest();
String hashCodeBuffer = (new BASE64Encoder()).encode(byteData);
return hashCodeBuffer.toString();
}
}
Update: first I managed to get a hex hash, with this code below.
public static String getHashCodeFromString(String str) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(str.getBytes());
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer hashCodeBuffer = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
hashCodeBuffer.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return hashCodeBuffer.toString();
}
What I needed is base64. I changed the code above, to the final code below, which gave me the expected result:
package routines;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
public class MyRoutineStringToSHA512test7 {
public static String getHashCodeFromString(String str) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(str.getBytes());
byte byteData[] = md.digest();
String hashCodeBuffer = (new BASE64Encoder()).encode(byteData);
return hashCodeBuffer.toString();
}
}
Hello,
Thanks for posting that you have resolved it by yourself.
Best regards
Sabrina