python-3.x - 使用 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)
请帮帮我。
解决方案
根据 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))
供参考。
推荐阅读
- javascript - 在数组Javascript中查找下一个素数
- python - 为什么使用光栅化保存为 .eps 的 matplotlib 图的文件大小会爆炸?
- python - 在 python 3 中安装 setuptools 时出错
- mysql - 重置 MYSQL 根密码 - ubuntu
- sql - 使用 XMLTABLE 视图时出现“ORA-03113:通信文件结束”
- sql-update - Redshift - 更新 Redshift DB 中的特定列
- java - 当我添加新的存储库和服务时,Spring Framework bean 工厂不满意
- java - 在 snappy 数据中通过 java 插入 json 对象时出错
- ruby - 为什么'Net::HTTPUnknownResponse.kind_of?Net::HTTPResponse' 返回'假'?
- amazon-web-services - AWS ec2 中不同文件中的多个 cron 作业