【问题标题】:How to encrypt and decrypt pandas dataframe with decryption key?如何使用解密密钥加密和解密熊猫数据帧?
【发布时间】:2018-08-31 13:08:21
【问题描述】:

我有一个包含 300 列的 df,但有一列 ID 我想加密并允许其他任何人使用密钥解密,如果我将 df 作为 csv 给他们。

这可能吗?

我知道如何对列进行哈希处理,但据我所知,我无法取消哈希处理或给某人一个密钥来取消哈希处理。

提前谢谢你。

编辑:

df

id
1
2
3

@Wen 这是一个很好的例子:

(1:2), (2:3),(3:4)

新的 df

id
2
3
4

【问题讨论】:

  • 您必须使用第三方库。我推荐pycryptodome
  • @t.m.adam 谢谢你的建议。我会尝试一些例子。
  • 为什么不换成赎金号,只提供地图字典给那些人
  • @Wen 我做了一个编辑,我提供的例子是你要找的吗?

标签: python python-3.x pandas encryption


【解决方案1】:

我推荐 python itsdangerous 库。这是一个简单的例子:

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]

secret-key 可以在您和其他受信任方之间共享以解密字符串或列。

这确实依赖于序列化,但是一些python数据类型不容易序列化,但如果你只需要一个列名或类似的东西,这可能会很好。

我想在此处添加一个限定条件,即此过程仅混淆数据,但实际上并未对其进行加密。当我最初回答这个问题时,我并没有完全理解这一点。 这种混淆可能足以满足您的需求,但请注意!来自文档:

接收者可以解码内容并查看包,但他们不能修改内容,除非他们也有你的密钥。 Docs

【讨论】:

  • 感谢您的建议。如果我将列加密并保存为 csv,对方是否会简单地读取 csv,并应用解密密钥?
  • 他们必须遍历 CSV 中的每一行并解密该列中的数据。另一种方法是在整个 CSV 输出上使用这个库,并让他们解密整个内容一次。或者您可以编写一个用户可以在 CSV 上运行的简单解密脚本,以便这些步骤自动发生。
【解决方案2】:

我认为你可以这样做

key=dict(zip(np.arange(len(df)),df.id))
df.id=np.arange(len(df))
**# for the person do not have the key**

df
Out[640]:
   id
0   0
1   1
2   2


**# for the person who havde the key**

df.id=df.id.map(key.get)

df
Out[642]: 
   id
0   1
1   2
2   3

【讨论】:

  • 这也很有效,而且非常简单,但是要寻找开箱即用的解决方案。不管怎样,感谢您的辛勤工作。
【解决方案3】:

您可以使用 Crypto.Cipher 库中的 AES。我编写了一些辅助函数来加密熊猫数据框中的列集。如果有帮助,请在此处提供示例:https://github.com/bennywij/junk-drawer/blob/master/secret_pandas.py

【讨论】:

    【解决方案4】:

    您可以使用cryptpandas

    例如,如果你有一个 pandas 数据框

    import pandas as pd
    df = pd.DataFrame({'A': [1, 2, 3],
                       'B': ['one', 'one', 'four']})
    

    您可以将其加密为

    import cryptpandas as crp
    
    crp.to_encrypted(df, password='mypassword123', path='file.crypt')
    

    并将其解密为

    decrypted_df = crp.read_encrypted(path='file.crypt', password='mypassword123')
    

    附:更多信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2020-04-23
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      相关资源
      最近更新 更多