【发布时间】:2021-07-28 10:43:06
【问题描述】:
我正在尝试编写一个程序来加密用户输入的文本数据并将加密的信息保存到 csv 文件中。要使用流密码,我首先将字符串类型数据转换为字节文字,然后尝试以这种格式保存它。问题出现在我下次打开程序时重新读取csv文件时,我保存为字节类型的数据已经转换为字符串类型,包括b''。请参考下面的代码。
IN:
from Crypto.Cipher import Salsa20
import pandas as pd
df = pd.DataFrame({'col1': ['secret info', 'more secret info'], 'col2': ['top secret stuff', 'hide from prying eyes']})
key = b'*Thirty-two byte (256 bits) key*'
nonce = b'*8 byte*'
cipher = Salsa20.new(key=key, nonce=nonce)
for col in df.columns:
df[col] = df[col].apply(lambda a: a.encode('utf-8'))
df[col] = df[col].apply(lambda a: cipher.encrypt(a))
print(f"Format of data in dataframe pre saving: {type(df.iloc[0, 0])}")
df.to_csv('my_data.csv', encoding='utf-8')
encrypted_df = pd.read_csv('my_data.csv', encoding='utf-8', index_col=0)
print(f"Format of data in re-read dataframe: {type(encrypted_df.iloc[0, 0])}")
OUT:
Format of data in dataframe pre saving: <class 'bytes'>
Format of data in re-read dataframe: <class 'str'>
有没有办法读取 csv 文件,使数据是字节类型而不是字符串,以便我可以轻松解密它?
我试过了:
-
在写入 csv 文件之前将数据解码回字符串,但这会导致 unicode 解码错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9c in position 0: invalid start byte -
从字符串中剥离
b'',然后编码为字节类型,但是编码器会添加负载反斜杠进行字符串转义,因此我无法解密文本。
我对编码比较陌生,对加密也很陌生,因此非常感谢简单的答案。
【问题讨论】:
标签: python-3.x csv encryption