对手机号用FPE的算法进行数据脱敏不用pyffx的代码
时间: 2024-04-27 07:19:13 浏览: 160
FPE(Format-Preserving Encryption)算法可以对数据进行加密,同时保持其原始格式,因此可以用于对手机号等数据进行脱敏。
以下是一个使用 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])
# 返回加密后的字符串
return str_val
# 测试代码
plaintext = '13800138000'
key = 'my-secret-key'
encrypted = fpe_encrypt(plaintext, key)
print('原始手机号:', plaintext)
print('加密后手机号:', encrypted)
```
该代码中使用 HMAC-SHA256 算法对明文进行哈希,得到一个长度为 32 字节的哈希值。然后将哈希值转换为一个整数,并将其转换为指定进制(这里使用了默认的十进制)。接着,对转换后的字符串进行 FPE 加密。这里的 FPE 加密算法采用了一个简单的转换方式:将每个数字加上一个固定的偏移量,并对进位后的结果取模。这样可以保证加密后的字符串仍然是一个数字字符串,且长度与原始字符串相同。最后,返回加密后的字符串。
需要注意的是,该代码中使用了一个简单的 FPE 加密算法,安全性可能不够高。在实际应用中,可以考虑使用更加复杂的 FPE 算法,或者结合其他加密算法来提高安全性。
阅读全文