那撸哆 2021-02-02 10:56 采纳率: 0%
浏览 43
已结题

3DES加解密,javascript不改变的前提下python如何加/解密得到相同的结果?

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加解密呢?

  • 写回答

3条回答 默认 最新

  • storm_huang 2021-02-02 11:20
    关注

    1、在加密的js文件里面把mode和padding的默认值设置为你的修改代码值。

    2、研究一下js的加解密过程,估计是每次加了盐,从而每次加密结果不一样。

    评论

报告相同问题?

悬赏问题

  • ¥15 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示