function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
AKKAKK 

How to create HMACSHA256 api signature

Hi, Can somebody help in creating HMACSHA256 api signature in apex using crypto class. Corresponding java code is given below :-

 

 public static void main(String[] args) throws GeneralSecurityException, IOException {
 
        String secretKey = "secretKey";
        String salt = "0123456789";
 
        String generateHmacSHA256Signature = generateHmacSHA256Signature(salt, secretKey);
        System.out.println("Signature: " + generateHmacSHA256Signature);
 
        String urlEncodedSign = URLEncoder.encode(generateHmacSHA256Signature, "UTF-8");
 
        System.out.println("Url encoded value: " + urlEncodedSign);
    }
 
    public static String generateHmacSHA256Signature(String data, String key) throws GeneralSecurityException {
        byte[] hmacData = null;
 
        try {
            SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(secretKey);
            hmacData = mac.doFinal(data.getBytes("UTF-8"));
            return new Base64Encoder().encode(hmacData);
        } catch (UnsupportedEncodingException e) {
            throw new GeneralSecurityException(e);
        }
    }

 

Thanks in advance.

bob_buzzardbob_buzzard

Can you post your code formatted - i.e. use the clipboard icon with the small 'c' on it - that will retain your formatting and mean we can read and understand easily.

AKKAKK

Sorry for unformatted code, actually I was looking into how to format but didn't find anything in mozilla and when login through chrome editor appeared.

 

I got the signature right using below code maybe this helps someone :-

 

public void genrateSignature() {

    String salt = String.valueOf(Crypto.getRandomInteger());

    String secretKey = 'secret_key';

    

    String signature = generateHmacSHA256Signature(salt, secretKey);

    

    System.debug('Signature : '+signature);

}

 

private static String generateHmacSHA256Signature(String saltValue, String secretKeyValue) {

    String algorithmName = 'HmacSHA256';

    

        Blob hmacData = Crypto.generateMac(algorithmName, Blob.valueOf(saltValue), Blob.valueOf(secretKeyValue));

        

        return EncodingUtil.base64Encode(hmacData);

    }

 

 

Thanks