Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AES-将字符串更改为字节,从而产生额外的/&引用;如何避免_Python_Django_Cryptography_Aes - Fatal编程技术网

Python 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”,等等 当它编码时,它变成一

我正在将一个字符串(使用os.uradom()生成并传递表单)更改为byte,以用作aes算法的键,但其结果是在实际需要的值上添加一个额外的“/” 请帮我做这个


我猜您正在使用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)