Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基本的encrypt()和decrypt()函数_Python_Django_Django Views - Fatal编程技术网

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

Python 基本的encrypt()和decrypt()函数,python,django,django-views,Python,Django,Django Views,我在我的views.py中有一个函数,在其中的某一行,我请求获取一个id。 一旦我得到这个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

我在我的views.py中有一个函数,在其中的某一行,我请求获取一个id。 一旦我得到这个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:你不能解密它(为加密而实现) 2平方米。 AES它处理的是16位数字,即8的倍数

我也尝试生成6位数的随机数,但这个想法也没有希望。 有人能告诉我怎么做吗?提前感谢

使用AES(从),但在加密前填充纯文本

此示例使用空字符(ASCII 0)填充明文

解密后,去掉空字符:

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

我遇到了完全相同的问题,并通过使用解决了它

这很简单

hashids = Hashids(salt="this is my salt")
hashed = hashids.encode(id) # to encode
id = hashids.decode(hashed) # to decode

这里有一些非常好的想法:因为AES算法适用于16字节倍数的块(AES.block_size=16)。完美答案道格。是否有一种方法可以避免或构建一些逻辑,我可以使用我的id,它将来自django视图函数中的请求,然后它适合块大小。我想避免主键硬编码,我们可以使其动态。我是加密方面的新手。但是谢谢你的帮助。很好的回答@我不确定我是否明白这一点。我在定义这些函数的文件中硬编码了主密钥。如果一个坏蛋可以得到这个文件,他可以做更多的邪恶不仅仅是找到主密钥。您如何设想主密钥是动态的?(同时,我从中抓起了我的主钥匙)究竟为什么会有一个eval()在那里?!这不仅非常危险,而且完全阻止了代码的工作。我根据一个实际使用场景改编了这段代码,在该场景中,我加密了一个python dict。在该场景中,解密值的类型是已知的。谢谢你指出这一点。我已经更新了这个示例,还添加了导入,以使这一切工作得更好。我认为hashid只是用来散列整数值的??
hashids = Hashids(salt="this is my salt")
hashed = hashids.encode(id) # to encode
id = hashids.decode(hashed) # to decode