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)
虽然语言不一样但是加密结果一样
上一篇: unity中预览lua文件
下一篇: NC20860 兔子的区间密码(二进制)