我在views.py中有一个函数,在某行我发出一个id的GET请求。 一旦我获得了id,我想加密该id,然后再解密。 所以我需要两个函数
def encrypt(id):#let say the id is 100
#do something
return encrypted_id # 6-digit let say 985634
def decrypt(encrypted_id): # Here enter 985634
#do something
return decrypted_id # i should get 100
我已经阅读了很多帖子,但没有找到一种简单而干净的方式在我的views.py中应用它 这就是我研究的内容
sha1:您无法解密(为加密而实施) Mee 2 M2。 AES它处理16位数的8位多数
我也尝试生成6位数的随机数,但这个想法也没有用。 任何人都能说出如何做到这一点的方法吗?提前致谢
答案 0 :(得分:21)
使用AES(来自pycrypto),但在加密前填充纯文本。
此示例使用空字符(ASCII 0)
填充明文from Crypto.Cipher import AES
import base64
MASTER_KEY="Some-long-base-key-to-use-as-encryption-key"
def encrypt_val(clear_text):
enc_secret = AES.new(MASTER_KEY[:32])
tag_string = (str(clear_text) +
(AES.block_size -
len(str(clear_text)) % AES.block_size) * "\0")
cipher_text = base64.b64encode(enc_secret.encrypt(tag_string))
return cipher_text
解密后,删除空字符:
def decrypt_val(cipher_text):
dec_secret = AES.new(MASTER_KEY[:32])
raw_decrypted = dec_secret.decrypt(base64.b64decode(cipher_text))
clear_val = raw_decrypted.decode().rstrip("\0")
return clear_val
答案 1 :(得分:5)
我遇到了完全相同的问题,并使用Hashids解决了这个问题。
就像
一样简单hashids = Hashids(salt="this is my salt")
hashed = hashids.encode(id) # to encode
id = hashids.decode(hashed) # to decode