Rus*_*ord 5 python encryption python-3.x pandas
我有一个包含 300 列的 df,但是ID我想加密其中一列,如果我将 df 作为 csv 提供给他们,则允许其他任何拥有密钥的人进行解密。
这可能吗?
我知道如何对列进行哈希处理,但据我所知,我无法对其进行哈希处理,也无法向某人提供对其进行哈希处理的密钥。
先感谢您。
编辑:
df
id
1
2
3
Run Code Online (Sandbox Code Playgroud)
@Wen 这是一个很好的例子:
(1:2), (2:3),(3:4)
Run Code Online (Sandbox Code Playgroud)
新DF
id
2
3
4
Run Code Online (Sandbox Code Playgroud)
我会推荐 pythonitsdangerous库。这是一个快速示例:
from itsdangerous import URLSafeSerializer
s = URLSafeSerializer('secret-key')
print(s.dumps([1, 2, 3, 4]))
# 'WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo'
print(s.loads('WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo'))
# [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
该secret-key可你和其他可信方解密字符串或列之间共享。
然而,这确实依赖于序列化,并且某些 python 数据类型不容易序列化,但是如果您只需要列名或类似的东西,这可能会很好地工作。
我想在这里添加一个限定条件,即此过程只会混淆数据,但实际上并未对其进行加密。当我最初回答这个问题时,我并不完全理解。这种混淆可能足以满足您的需求,但请注意!从文档:
接收者可以解码内容并查看包裹,但除非他们也有您的密钥,否则他们无法修改内容。 文档
小智 6
您可以使用cryptpandas。
举个例子,如果你有一个 pandas 数据框
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3],
'B': ['one', 'one', 'four']})
Run Code Online (Sandbox Code Playgroud)
你可以将其加密为
import cryptpandas as crp
crp.to_encrypted(df, password='mypassword123', path='file.crypt')
Run Code Online (Sandbox Code Playgroud)
并将其解密为
decrypted_df = crp.read_encrypted(path='file.crypt', password='mypassword123')
Run Code Online (Sandbox Code Playgroud)
PS 更多信息请参见此处。