欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java md5加密和python md5加密

程序员文章站 2024-03-14 15:04:34
...

1.java md5加密

public class MD5Util {
    private static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    private static String MD5 = "MD5";//加签方式:MD5


    public static String sign(String data, String key) throws Exception {
        //得到明文的字节数组
        byte[] btInput = (data + key).getBytes();
        // 创建一个提供信息摘要算法的对象(MD5摘要算法)
        MessageDigest messageDigest = MessageDigest.getInstance(MD5);
        // 使用指定的字节更新摘要
        messageDigest.update(btInput);
        // 得到二进制的密文
        byte[] encryptData = messageDigest.digest();
        // 把密文转换成十六进制的字符串形式
        String encryptDataStr = bytesToHex(encryptData);
        return encryptDataStr;

    }

    public static String bytesToHex(byte[] bytes) {
        int k = 0;
        char[] hexChars = new char[bytes.length * 2];
        for (int i = 0; i < bytes.length; i++) {
            byte byte0 = bytes[i];
            hexChars[k++] = hexDigits[byte0 >>> 4 & 0xf];
            hexChars[k++] = hexDigits[byte0 & 0xf];
        }
        return new String(hexChars);
    }

    public static void main(String[] args) throws Exception {
        System.out.print(sign("xxx","xxx"));
    }
}

2.python 的实现方式

# 导入数据处理加密的包
import hashlib

keyString = "testkey"
# 所有发送或者接收到的数据定义为字典类型数据
data = {
    "serviceId": "1234",
    "pageNum": "123",
    "pageSize": "123",
    "curTimestamp": "1615518288940",
    "sign": "C7AC1EF4C65E64C63A573EC46523CA77"
}


# 定义函数作用:去除参数的值为空或者参数名为sign的数据,返回参与签名的字典类型数据
def GetSignData(data):
    signData = {}
    for key, value in data.items():
        if value != "" and key != "sign":
            signData[key] = value
    return signData


# 对参数按照key=value的格式,并按照参数名ASCII字典序排序拼接成字符串stringA,最后拼接上key,返回拼接API**。
def SignString(signData, key):
    # 定义空列表
    list = []
    # 定义空字符串
    stringA = ""
    # 循环遍历字典数据的键值,取出存放到列表中
    for key in signData.keys():
        list.append(key)
    # 对列表的对象进行排序,默认升序,即按照ASCII码从小到大排序
  #  list.sort()  不排序
    # 循环遍历排序后的列表,根据键值取出字典键对应的值
    for i in list:
        stringA += i + "=" + signData[i] + "&"
    # 参数拼接成需要加密的字符串
    stringA= stringA[0:-1] # 去掉最后一个“&”
    stringA+= keyString
    return stringA


# 调用GetSignData函数,获取参与签名的参数,返回新的字典数据
signData = GetSignData(data)
print(signData)

# 调用函数,返回需要加密的字符串
signBody = SignString(signData, keyString)

print(signBody)
# 创建对象md
md = hashlib.md5()
# 对stringA字符串进行编码
md.update(signBody.encode('utf-8'))
# 数据加密
signValue = md.hexdigest()
# 把加密的结果,小写转换成大写,upper函数
signValue = signValue.upper()
print(signValue)

虽然语言不一样但是加密结果一样