对手机号用FPE的算法进行数据脱敏不用pyffx并保持加密后的手机号与原手机号的格式相同的代码
时间: 2024-04-26 18:27:16 浏览: 190
以下是一个使用 FPE 算法进行手机号脱敏的 Python 示例代码,可以保持加密后的手机号与原手机号的格式相同:
```python
import hashlib
import hmac
import base64
def fpe_encrypt(plaintext, key, radix=10, rounds=4):
# 对明文进行哈希
hash_val = hmac.new(key.encode(), plaintext.encode(), hashlib.sha256).digest()
# 将哈希值转换为整数
num_val = int.from_bytes(hash_val, byteorder='big')
# 将整数转换为指定进制的字符串
str_val = ''
while num_val > 0:
num_val, rem = divmod(num_val, radix)
str_val = str(rem) + str_val
# 对字符串进行 FPE 加密
for i in range(rounds):
str_val = ''.join([chr((ord(c) - ord('0') + i) % (radix - 1) + ord('0')) for c in str_val])
# 将加密后的字符串填充到与原始字符串相同的长度
encrypted = str_val.zfill(len(plaintext))
# 返回加密后的字符串
return encrypted
# 测试代码
plaintext = '13800138000'
key = 'my-secret-key'
encrypted = fpe_encrypt(plaintext, key)
print('原始手机号:', plaintext)
print('加密后手机号:', encrypted)
```
该代码实现了与前面代码类似的 FPE 加密算法,不同之处在于加密后的字符串需要填充到与原始字符串相同的长度。这里使用了字符串的 `zfill()` 方法来实现填充,该方法可以在字符串左侧填充指定数量的零,使得字符串的总长度等于指定长度。
需要注意的是,这里的 FPE 加密算法同样采用了一个简单的转换方式,安全性可能不够高。在实际应用中,可以考虑使用更加复杂的 FPE 算法,或者结合其他加密算法来提高安全性。
阅读全文