首页 > 解决方案 > 建议的通过python加密的方法

问题描述

感谢您的时间和精力,但我想我可能错误地传递了我想要的东西,我的错。

长话短说,有什么方法可以加密某个字符串或整个数组?

{
    "gender": "male",
    "phone-number": "1234567890",
    "job": "student",
    "location": {
        "county": "LA-county",
        "town": "sunvalley",
        "country": "USA",
        "apartment-number": "13579abcdefg"
    },
    "item": {
        "item-type": "cloth",
        "item-size": "large",
        "item-number": "xyz24680abc",
        "item-material": "cotton"
    },
    "hairstyle": "long",
    "alive": "true",
}

假设公寓号码:13579abcdefg 需要加密。我可以像下面这样使用 fernet 吗?

from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)
encrypt_value = f.encrypt(b"YourString")
f.decrypt(encrypt_value)

我听说有人提到 base64 ......当涉及到加密某些值时,你会推荐哪种方法?

标签: python

解决方案


此代码将在 JSON 上运行,并将使用问题中指定的格式解析 values_to_change 列表中 JSON 中键的名称

import json

with open('filename.json') as f:
    data = json.load(f)

values_to_change = ["phone-number", "apartment-number", "item-number"]
for k, v in data.items():
    if isinstance(v, str):
        if k in values_to_change:
            data[k] = "{}...{}".format(v[:3], v[-3:])
    elif isinstance(v, dict):
        for kv, vv in v.items():
            if kv in values_to_change:
                data[k][kv] = "{}...{}".format(vv[:3], vv[-3:])


with open('newfilename.json', 'w') as f:
    json.dump(data, f, indent=2)

输出

{'gender': 'male',
 'phone-number': '123...890',
 'job': 'student',
 'location': {'county': 'LA-county',
  'town': 'sunvalley',
  'country': 'USA',
  'apartment-number': '135...efg'},
 'item': {'item-type': 'cloth',
  'item-size': 'large',
  'item-number': 'xyz...abc',
  'item-material': 'cotton'},
 'hairstyle': 'long',
 'alive': 'true'}

推荐阅读