如何生成Sign

生成sign的逻辑说明

生成签名 sign 的时候,将颁发的 signKey 加入到传递的参数中,参与加密 传递的参数(包含 signKey)按照参数名升序排序,然后,以&形式连接(类似格式为 a=xxx&b=xxx&c=xxx...),生成小写的 md5 串 signKey 不要参与参数传递,只参与生成 sign 其中:account,secret,signKey 由渠道方提供

加密 java 示例代码

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.util.Map;
import java.util.TreeMap;

public class AuthenticationUtils {

    private static MessageDigest md5 = null;

    public static String generateSign(TreeMap map) throws UnsupportedEncodingException {
        Map<String, String> resultMap = sortMapByKey(map);
        String str = new String();
        for (Map.Entry<String, String> entry : resultMap.entrySet()) {
            if (str.equals("")) {
                str = entry.getKey() + "=" + entry.getValue();
            } else {
                str += "&" + entry.getKey() + "=" + entry.getValue();
            }
        }
        String sign = getMd5(str);
        return sign;
    }

    public static Map<String, String> sortMapByKey(Map<String, String> map) {
        if (map == null || map.isEmpty()) {
            return null;
        }
        Map<String, String> sortMap = new TreeMap<String, String>(
                new MapKeyComparator());
        sortMap.putAll(map);
        return sortMap;
    }

    public static String getMd5(String str) throws UnsupportedEncodingException {
        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        byte[] bs = md5.digest(str.getBytes("utf-8"));
        StringBuilder sb = new StringBuilder(40);
        for (byte x : bs) {
            if ((x & 0xff) >> 4 == 0) {
                sb.append("0").append(Integer.toHexString(x & 0xff));
            } else {
                sb.append(Integer.toHexString(x & 0xff));
            }
        }
        return sb.toString();
    }
}
import java.util.Comparator;
class MapKeyComparator implements Comparator<String> {

    @Override
    public int compare(String str1, String str2) {

        return str1.compareTo(str2);
    }
}

加密 python示例代码

import hashlib
from collections import OrderedDict

def generate_sign(params, sign_key):
    # 将参数按键名升序排序
    sorted_params = OrderedDict(sorted(params.items(), key=lambda t: t[0]))

    # 将 signKey 添加到参数中
    sorted_params['signKey'] = sign_key

    # 构建待加密的字符串
    str_to_encrypt = '&'.join(f"{key}={value}" for key, value in sorted_params.items())

    # 生成 MD5 签名
    sign = hashlib.md5(str_to_encrypt.encode('utf-8')).hexdigest()

    return sign

# 示例参数
params = {
    'account': 'example_account',
    'secret': 'example_secret'
}

# 假设的 signKey
sign_key = 'your_sign_key_here'

# 生成签名
sign = generate_sign(params, sign_key)

results matching ""

    No results matching ""