Python AES-将字符串更改为字节,从而产生额外的/&引用;如何避免
我正在将一个字符串(使用os.uradom()生成并传递表单)更改为byte,以用作aes算法的键,但其结果是在实际需要的值上添加一个额外的“/” 请帮我做这个Python AES-将字符串更改为字节,从而产生额外的/&引用;如何避免,python,django,cryptography,aes,Python,Django,Cryptography,Aes,我正在将一个字符串(使用os.uradom()生成并传递表单)更改为byte,以用作aes算法的键,但其结果是在实际需要的值上添加一个额外的“/” 请帮我做这个 我猜您正在使用python3。(蟒蛇2和蟒蛇3完全不同。) 首先,让我们试着解释一下为什么会发生这种情况 从其他位置复制一个b”\x08\xda…并将其粘贴到提示符。input将返回一个str对象(python2的unicode),其第一个字符为“b”,第二个字符为“”,第三个字符为“\”,第四个字符为“x”,等等 当它编码时,它变成一
我猜您正在使用python3。(蟒蛇2和蟒蛇3完全不同。) 首先,让我们试着解释一下为什么会发生这种情况 从其他位置复制一个
b”\x08\xda…
并将其粘贴到提示符。input
将返回一个str对象(python2的unicode),其第一个字符为“b”,第二个字符为“”,第三个字符为“\”,第四个字符为“x”,等等
当它编码时,它变成一个具有相同字符(以字节表示)的字节字符串,因为只有ascii字符
还有印刷品。要打印的字节是什么?它打印为b'\\'
,这就是为什么会看到双反斜杠
一种简单(但危险)的方法 从提示符读取后,
eval
it。也就是说,像python代码一样执行它。然后你会得到它第一次被随机生成时的样子。事实上,python2中的input
为您做了这件事
但这当然是不安全的,因为用户提供的输入可能包含任何可能的字符串,并且可能包含一些恶意代码段
我能想到一个更好的办法
因为键总是字节字符串,字节字符串通常不可打印。因此,您需要将其转换为可打印的内容,将其复制并粘贴到此处,然后将其反转换回来。也许base64编码可以帮助您做到这一点。实际上,我是在发送html表单中的数据,或者是在数据库中以文本字段的形式存储key的值。因此,os.uradom()给定的字节值被更改回字符串,因此尝试将其更新回字节,导致密钥大小无效,因为正在打印“\\”。
import unittest
import base64
from py3rijndael import Rijndael
import os
import codecs
#plain text
a=input("Please Enter Plain text: ")
plain_text = a.encode('utf-8')
padded_text = plain_text.ljust(32, b'\x1b')
#key
key=input()
key_bytes = codecs.encode(key, 'UTF-8')
#key_bytes = key.encode('utf-8') #two change string to byte
#base64_key_bytes = base64.b64encode(key_bytes) #base 64 encryption
key_bytes = key_bytes[2:-1]
print(key_bytes)
#encryption
rijndael_key = Rijndael(key_bytes, block_size=32)
cipher = rijndael_key.encrypt(padded_text)
print(cipher)