建议通过python进行加密的方法

2024-05-19 00:05:43 发布

您现在位置: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。。。在加密某些值时,您建议使用哪种方法


Tags: 方法key字符串numbervalue时间phone数组
3条回答

这段代码将在JSON上运行,并将解析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'}

下面是一个解决方案,它将解释嵌套的JSON:


def mask_sensitive(payload, fields, n_front=3, n_back=3):
    out = {}
    for k, v in payload.items():

        # if it's a dict, recurse
        if isinstance(v, dict):
            out[k] = mask_sensitive(v, fields, n_front, n_back)

        # this assumes the field is a string, and not an iterable
        # but you can always add logic to allow ints, lists, etc.
        elif k in fields:
            out[k] = v[:n_front] + "..." + v[-n_back:]

        else:
            out[k] = v
    return out

您可能需要为某些内容编写逻辑,例如,如果字段长度小于3个字符,您希望如何填充敏感信息?但这给了你一个很好的起点。例如:

>>> import pprint
>>> pprint.pprint(mask_sensitive(x, ["phone-number", "apartment-number"]))
{'alive': 'true',
 'gender': 'male',
 'hairstyle': 'long',
 'item': {'item-material': 'cotton',
          'item-number': 'xyz24680abc',
          'item-size': 'large',
          'item-type': 'cloth'},
 'job': 'student',
 'location': {'apartment-number': '135...efg',
              'country': 'USA',
              'county': 'LA-county',
              'town': 'sunvalley'},
 'phone-number': '123...890'}

只需得到前三个字符,三个点,然后是最后三个字符

def censor(string):
    return string[:3] + "..." + string[-3:]

data["phone-number"] = censor(data["phone-number"])
data["apartment-number"] = censor(data["item-number"])
data["location"]["apartment-number"] = censor(data["location"]["apartment-number"])

相关问题 更多 >

    热门问题