python-3.x - Python中的DES加密
问题描述
pycryptodome 工作正常,但我收到一条错误消息。
这是我的代码:
from Crypto.Cipher import DES
key = 'hello123'
def pad(text):
while len(text) % 8 != 0:
text += ''
return text
des = DES.new(key, DES.MODE_ECB)
text1 = 'Python is the Best Language!'
padded_text = pad(text1)
encrypted_text = des.encrypt(padded_text)
print(encrypted_text)
print(des.decrypt(encrypted_text))
这是我的错误信息:
回溯(最近一次调用最后):文件“C:\Users\Raj_7\Desktop\des.py”,第 10 行,在 des = DES.new(key, DES.MODE_ECB)
文件“D:\Python\lib\site-packages\Crypto\Cipher\DES.py”,第 145 行,新返回 _create_cipher(sys.modules[ name ], key, mode, *args, **kwargs)
文件“D:\Python\lib\site-packages\Crypto\Cipher__init__.py”,第 79 行,_create_cipher 返回模式[模式](工厂,**kwargs)
文件“D:\Python\lib\site-packages\Crypto\Cipher_mode_ecb.py”,第 215 行,在 _create_ecb_cipher cipher_state = factory._create_base_cipher(kwargs)
文件“D:\Python\lib\site-packages\Crypto\Cipher\DES.py”,第 76 行,在 _create_base_cipher 结果 = start_operation(c_uint8_ptr(key),
文件“D:\Python\lib\site-packages\Crypto\Util_raw_api.py”,第 234 行,在 c_uint8_ptr
raise TypeError("对象类型 %s 不能传递给 C 代码" % type(data)) TypeError: 对象类型不能传递给 C 代码
解决方案
如果我使用字节而不是字符串,它在这里工作
from Crypto.Cipher import DES
def pad(text):
n = len(text) % 8
return text + (b' ' * n)
key = b'hello123'
text1 = b'Python is the Best Language!'
des = DES.new(key, DES.MODE_ECB)
padded_text = pad(text1)
encrypted_text = des.encrypt(padded_text)
print(encrypted_text)
print(des.decrypt(encrypted_text))
推荐阅读
- paypal - 如果输入的第一张卡详细信息失败,则所有卡的每个 3D 安全性都失败
- python - 数据帧/列表/numpy元组数组的快速切片
- vue.js - 使用 createApp 传递道具
- amazon-web-services - 从主存储桶中删除 S3 对象(所有版本),同时将其复制到跨区域存储桶
- vb.net - 错误:由于以下错误,检索组件的 COM 类工厂失败:80070005 访问被拒绝
- react-native - 无法找到 RNReanimated 依赖的 React-callinvoker 规范
- amazon-sagemaker - 使用 boto3 调用 sagemaker 端点。抛出错误
- java - java中的自动日期格式识别
- kotlin - 重载分辨率歧义。所有这些函数都匹配 kotlin 中的错误
- java - 出现错误 - 由于在运行 Spring Boot 应用程序时缺少 ServletWebServerFactory bean,无法启动 ServletWebServerApplicationContext