首页 > 解决方案 > 使用 CryptoJS 对 JS DES 加密等效的 Python3 代码

问题描述

我有一个 js DES 加密代码使用 CryptoJS 如下:

const CryptoJS = require('crypto-js');

function encryptByDES(message, key) {
        var keyHex = CryptoJS.enc.Utf8.parse(key);
        var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
          mode: CryptoJS.mode.ECB,
          padding: CryptoJS.pad.Pkcs7
        });
        return encrypted.toString();
      }

如果输入message="123456789", key="123456abcdefghijklmnopqrstuvwxyz",则输出为J6cwLeYoidP5U1V6MT67Ig==

我想知道代码的 Python3 版本。我尝试了PyCrytodome没有运气(我不太了解这个包),最近的代码如下:

from Crypto.Util.Padding import pad, unpad
from Crypto.Cipher import DES
from Crypto.Random import get_random_bytes
import binascii

data = b'123456789'
key = b'123456abcdefghijklmnopqrstuvwxyz'
iv = get_random_bytes(16)
# below line triggers error
cipher1 = DES.new(key, DES.MODE_CFB, iv)
ct = cipher1.encrypt(pad(data, 16))
print(binascii.b2a_base64(ct))

错误是

ValueError: Incorrect DES key length (32 bytes)

请帮帮我。

标签: python-3.xcryptojs

解决方案


根据 Topaco 的建议,终于成功了,代码如下:

data = b'123456789'
# the next cdefghijklmnopqrstuvwxyz is no needed
key = b'123456ab'
cipher = DES.new(key, DES.MODE_ECB)
ct = cipher.encrypt(pad(data, 8))
print(binascii.b2a_base64(ct))

供参考。


推荐阅读