Python 字节 & 列表 & 加密
Python Bytes & Lists & Encryption
我正在使用 Fernet 通过 this implementation 加密我的数据。假设我有这三个数据:
data = [fernet.encrypt("Hello".encode()), fernet.encrypt("Stack".encode()), fernet.encrypt("Overflow".encode())]
在这个操作之后,Python自动将bytes
转换为string
,我正在将它们写入一个csv文件。当我需要像这样解密它们时:
fernet.decrypt(data)
它给我一个错误,比如你只能解密字节等。我还检查了我在 csv 文件中的数据已经是字节但字符串形式。
b'gAAAAABiVUw5BzOkOv3VxlV5xa57Iaf0R4dzPbgsrnheAME8uYeslCZfTx9GeyRWe7l9VMM-gdDXiPZ4zsAXoXkG6T1dyXH6EztcqirrPhXX3YCt65_3xXvykVTDPdbEXs51cHvR-3HH'
fernet.encrypt
returns bytes
(我猜,你没有具体说明你使用的是哪个实现,我猜 this one)。 .decode()
他们到一个字符串。那么您的 CSV 将包含“gAAA...”,而不是“b'gAAA...'”。当再次从 CSV 中读取这些内容时,.encode()
将字符串传递给 fernet.decrypt
.
fernet.encrypt
returns bytes
bytes.decode()
将 bytes
变成 str
- CSV 想要
str
str.encode()
将 str
变成 bytes
fernet.decrypt
想要 bytes
编码、写入文本、读取和解码的 end-to-end 使用示例。
Fernet
文档可以是 referenced here。
from cryptography.fernet import Fernet
# Auto-generate a secret key.
key = Fernet.generate_key()
f = Fernet(key)
# Encode the string 'Hello' and encrypt.
encoded = f.encrypt('Hello'.encode())
这将创建一个字节串(一个 bytes
对象)作为:
b'gAAAAABiVVOOeO-hUG2QaKCVOyshntpbqVbxnexIVsFr7ttBGmKhHlDeM7jkTCjPPGphZxbh4D15X82pts3hKes12DjzwI8_jQ=='
写入、读取和解密:
# Write the *decoded* encrypted string to a TXT file.
with open('/tmp/encoded.txt', 'w') as fh:
fh.write(encoded.decode())
# Read the encrypted string from TXT file.
with open('/tmp/encoded.txt') as fh:
encoded = fh.read()
# Encode the string, pass through fernet for decryption,
# and decode the bytes output.
f.decrypt(encoded.encode()).decode()
输出:
'Hello'
我正在使用 Fernet 通过 this implementation 加密我的数据。假设我有这三个数据:
data = [fernet.encrypt("Hello".encode()), fernet.encrypt("Stack".encode()), fernet.encrypt("Overflow".encode())]
在这个操作之后,Python自动将bytes
转换为string
,我正在将它们写入一个csv文件。当我需要像这样解密它们时:
fernet.decrypt(data)
它给我一个错误,比如你只能解密字节等。我还检查了我在 csv 文件中的数据已经是字节但字符串形式。
b'gAAAAABiVUw5BzOkOv3VxlV5xa57Iaf0R4dzPbgsrnheAME8uYeslCZfTx9GeyRWe7l9VMM-gdDXiPZ4zsAXoXkG6T1dyXH6EztcqirrPhXX3YCt65_3xXvykVTDPdbEXs51cHvR-3HH'
fernet.encrypt
returns bytes
(我猜,你没有具体说明你使用的是哪个实现,我猜 this one)。 .decode()
他们到一个字符串。那么您的 CSV 将包含“gAAA...”,而不是“b'gAAA...'”。当再次从 CSV 中读取这些内容时,.encode()
将字符串传递给 fernet.decrypt
.
fernet.encrypt
returnsbytes
bytes.decode()
将bytes
变成str
- CSV 想要
str
str.encode()
将str
变成bytes
fernet.decrypt
想要bytes
编码、写入文本、读取和解码的 end-to-end 使用示例。
Fernet
文档可以是 referenced here。
from cryptography.fernet import Fernet
# Auto-generate a secret key.
key = Fernet.generate_key()
f = Fernet(key)
# Encode the string 'Hello' and encrypt.
encoded = f.encrypt('Hello'.encode())
这将创建一个字节串(一个 bytes
对象)作为:
b'gAAAAABiVVOOeO-hUG2QaKCVOyshntpbqVbxnexIVsFr7ttBGmKhHlDeM7jkTCjPPGphZxbh4D15X82pts3hKes12DjzwI8_jQ=='
写入、读取和解密:
# Write the *decoded* encrypted string to a TXT file.
with open('/tmp/encoded.txt', 'w') as fh:
fh.write(encoded.decode())
# Read the encrypted string from TXT file.
with open('/tmp/encoded.txt') as fh:
encoded = fh.read()
# Encode the string, pass through fernet for decryption,
# and decode the bytes output.
f.decrypt(encoded.encode()).decode()
输出:
'Hello'