今天接到一个对接第三方的需求,要解密对方接口返回的数据,加密方式使用的是DES加密
python DES加密分为两种,一种是DES;另外一种是DES3,也叫做TripleDES
下面分别做一下说明
第一种DES3,也就是TripleDES,直接撸代码
from Crypto.Cipher import DES3
KEY = 'welcome_to_china_weixina'
def encrypt_data(data):
pad = 8 - len(data) % 8
padStr = ""
for i in range(pad):
padStr = padStr + chr(pad)
data = data + padStr
des3 = DES3.new(KEY, DES3.MODE_ECB)
des3_data = des3.encrypt(data)
base64_des3_data = base64.standard_b64encode(des3_data)
return base64_des3_data
print encrypt_data("13333333333")
def decrypt_data(data):
pad = 8 - len(data) % 8
padStr = ""
for i in range(pad):
padStr = padStr + chr(pad)
data = data + padStr
base64_data = base64.standard_b64decode(data)
des = DES3.new(KEY, DES3.MODE_ECB)
decrypt_data = des.decrypt(base64_data)
return decrypt_data[0:ord(decrypt_data[len(decrypt_data)-1])*-1]
print decrypt_data("SRSTugMGkllhCfw47E1aWg==")
这种加密方式 KEY的值必须是16位或者24位,否则不支持
下面是加密解密后的结果
第二种 DES,代码可以延用上面这套加密解密方式
from Crypto.Cipher import DES
KEY = 'welcomet'
def encrypt_data(data):
pad = 8 - len(data) % 8
padStr = ""
for i in range(pad):
padStr = padStr + chr(pad)
data = data + padStr
des3 = DES.new(KEY, DES.MODE_ECB)
des3_data = des3.encrypt(data)
base64_des3_data = base64.standard_b64encode(des3_data)
return base64_des3_data
print encrypt_data("13333333333")
def decrypt_data(data):
pad = 8 - len(data) % 8
padStr = ""
for i in range(pad):
padStr = padStr + chr(pad)
data = data + padStr
base64_data = base64.standard_b64decode(data)
des = DES.new(KEY, DES.MODE_ECB)
decrypt_data = des.decrypt(base64_data)
return decrypt_data[0:ord(decrypt_data[len(decrypt_data)-1])*-1]
print decrypt_data("IL6rNiXEDgCfPzdg7KzuJg==")
这种加密方式 KEY的值必须是8位,否则不支持
下面是加密解密后的结果