基本的encrypt()和decrypt()函数

the*_*ame 8 python django django-views

我在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
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多帖子,但没有找到一种简单而干净的方式在我的views.py中应用它.这里我学到了什么

sha1:你不能解密(为加密实现)Mee 2 M2.AES它处理16位数的8位数的倍数

我试图生成6位数的随机数,但这个想法也没有用.任何人都能说出如何做到这一点的方法吗?提前致谢

Dou*_*ris 23

使用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
Run Code Online (Sandbox Code Playgroud)

解密后,删除空字符:

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
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 6

我有完全相同的问题,并通过使用Hashids解决它.

它很简单

hashids = Hashids(salt="this is my salt")
hashed = hashids.encode(id) # to encode
id = hashids.decode(hashed) # to decode
Run Code Online (Sandbox Code Playgroud)

  • Hashids只是为了散列整数值我认为.. ?? (2认同)