All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hnhtxx.sdk.util.SignatureUtils Maven / Gradle / Ivy

The newest version!
package cn.hnhtxx.sdk.util;

import cn.hnhtxx.exception.BusinessException;
import cn.hnhtxx.sdk.pojo.query.SdkQuery;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

/**
 * @author huangshuo
 * @date 2023-11-02 17:09
 */
public class SignatureUtils {

    private static final String ALGORITHM = "HmacSHA256";

    /**
     * 生成签名
     *
     * @param sdkQuery
     * @return
     */
    public static String getSignature(SdkQuery sdkQuery) {
        String signature = sdkQuery.getIdentity() + sdkQuery.getInterfacetype() + sdkQuery.getZipCode()
                + sdkQuery.getEncryptCode() + sdkQuery.getContent() + sdkQuery.getSignType();
        signature = HMACSHA256(signature.getBytes(), sdkQuery.getSecretKey().getBytes());

        return signature;
    }

    /**
     * 签名
     *
     * @param data
     * @param key
     * @return
     */
    public static String HMACSHA256(byte[] data, byte[] key) {
        try {
            SecretKeySpec signingKey = new SecretKeySpec(key, ALGORITHM);
            Mac mac = Mac.getInstance(ALGORITHM);
            mac.init(signingKey);
            return byte2hex(mac.doFinal(data));
        } catch (Exception e) {
            throw new BusinessException(e);
        }
    }

    private static String byte2hex(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b != null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1)
                hs.append('0');
            hs.append(stmp);
        }
        return hs.toString().toUpperCase();
    }


    /**
     * 验签
     *
     * @param message
     * @param secret
     * @param signature
     * @return
     */
    public static boolean verify(String message, String secret, String signature) {
        return signature != null && signature.equals(HMACSHA256(message.getBytes(), secret.getBytes()));
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy