You need to sign in to do that
Don't have an account?
Using a Hex key to create SHA-256 MAC .
Hi all...
I want to create SHA-256 HMAC encoded message. The secrete key which i am using is in HEX formate. On a website i converted my key '1234567890abcdef1a2b3c4d5f6a7b3a' to characters and used in the code below. I am also using an online tool which computes the SHA-256 HMAC message so i can check my code is working properly or not.
Problem:- My code does not create correct message(only first few characters matches some time with the online tool messae). When i traced the error i found that there is some problem with Blob.valueOf(key) at line 4 because when at line 6 i convert the key back to Hex the output does not match the Hex input (Output=12345678c290c2abc38dc3af1a2b3c4d5f6a7b3a) red colored charecters are extra and e is missing. I tried some other hex charactres and all the time extra characters appeared in the hex string when converted back(mostly c2 and 38 are the extra characters). I also tried to convert Hex to decimal in apex and then by using this method String.fromCharArray( intArr ) converted decimals into string, again the result was same(output 2 = 12345678c290c2abc38dc3af1a2b3c4d5f6a7b3a). Here is the code:
/*1234567890abcdef1a2b3c4d5f6a7b3a This hex is converted to the following character String 'key'*/ String key = '4Vx�«Íï+<M_j{:'; String temp = '1F1F1F1F1356998400'; Blob mac = Crypto.generateMac('hmacSHA256',Blob.valueOf(temp),Blob.valueOf(key)); String csvBody = EncodingUtil.convertToHex(mac); system.debug(EncodingUtil.convertToHex(Blob.valueOf(key))); //12345678c290c2abc38dc3af1a2b3c4d5f6a7b3a
can any one help me eith this?
You're trying to stuff a binary string into a UTF-8 string. It doesn't work, because some of the binary code points you specified are invalid in UTF-8, and so the system has to add encoding bytes. That's where the c2, etc come in to play. Instead, you need a pure blob (binary large object) representation of the key, not a UTF-8 string.
Try this instead:
All Answers
You're trying to stuff a binary string into a UTF-8 string. It doesn't work, because some of the binary code points you specified are invalid in UTF-8, and so the system has to add encoding bytes. That's where the c2, etc come in to play. Instead, you need a pure blob (binary large object) representation of the key, not a UTF-8 string.
Try this instead:
thank you sfdcfox! this worked for me.
I wrote a method for HEX to Base64 conversion. after coonversion i am using your method and it is working fine. thank you again.