js是一位年薪百万的大佬写的,我写py,他的写的3DES加密没有编码key,每次的密文都不同,但是可以解出来相同的结果。而问题是我也需要使用python写出相同的3DES加密,两种语言可以互相加解密得到相同的结果,然而在网上找遍了例子都没有方法。下面是他的js代码(我只取出了一部分关键的):
// 3DES 加解密
var encrypted = CryptoJS.TripleDES.encrypt('1612139298649', 'NrFvKiIpUG28dCB0').toString()
console.log('DES加密后:', encrypted) //得到的结果每次都不同,但是解密得到的结果相同
var origin = CryptoJS.TripleDES.decrypt('U2FsdGVkX1+pcgqyUJeu/ZRDL5FoTX7Tlb9/x8O6xcw=','NrFvKiIpUG28dCB0').toString(CryptoJS.enc.Utf8)
console.log('DES解密后:', origin) //解密的结果都相同
后来发现如果他的代码是这样的,我的python就可以得到和js相同的结果,然而js是不能改的,所以我应该怎么做呢?:
// 3DES 加解密
var encrypted = CryptoJS.TripleDES.encrypt('1612139298649', CryptoJS.enc.Utf8.parse('NrFvKiIpUG28dCB0'),{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
}).toString()
console.log('DES加密后:', encrypted) // 结果固定不变和python相同 XzR/zMCY2fIMhViwNS+vwg==
var origin = CryptoJS.TripleDES.decrypt('U2FsdGVkX1+pcgqyUJeu/ZRDL5FoTX7Tlb9/x8O6xcw=',CryptoJS.enc.Utf8.parse('NrFvKiIpUG28dCB0'),{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
}).toString(CryptoJS.enc.Utf8)
console.log('DES解密后:', origin) // 结果固定不变
我的python代码:
import base64
import pyDes
class PyDES3():
def __init__(self, key):
self.cryptor = pyDes.triple_des(key, padmode=pyDes.PAD_PKCS5)
def encrypt(self, text):
x = self.cryptor.encrypt(text.encode())
return base64.standard_b64encode(x).decode()
def decrypt(self, text):
x = base64.standard_b64decode(text.encode())
x = self.cryptor.decrypt(x)
return x.decode()
if __name__ == '__main__':
key = 'NrFvKiIpUG28dCB0'
text = '1612139298649'
des = PyDES3(key)
print(des.encrypt(text)) # 结果固定 XzR/zMCY2fIMhViwNS+vwg== 和上面我改的js结果相同
print(des.decrypt(des.encrypt(text))) # 1612139298649
大佬的代码不能改,py如何能够写出和他相同的3DES加解密呢?