Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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中生成临时url_Python_Encryption_Hash_Hyperlink_Temporary - Fatal编程技术网

在Python中生成临时url

在Python中生成临时url,python,encryption,hash,hyperlink,temporary,Python,Encryption,Hash,Hyperlink,Temporary,我一直在尝试用python生成一个临时url,url将包含一些我需要确保没有更改的数据,因此我将在最后添加一个哈希,但我始终以一个bString结尾,无论我尝试了什么,有人能指出我做错了什么吗? 这是我的代码示例 哦,我知道也许改变算法/编码可以解决这个问题,但我找不到合适的,有谁能解释他为什么投了否决票 import hashlib import datetime from Crypto.Cipher import AES def checkTemp(tempLink): encry

我一直在尝试用python生成一个临时url,url将包含一些我需要确保没有更改的数据,因此我将在最后添加一个哈希,但我始终以一个bString结尾,无论我尝试了什么,有人能指出我做错了什么吗? 这是我的代码示例 哦,我知道也许改变算法/编码可以解决这个问题,但我找不到合适的,有谁能解释他为什么投了否决票

import hashlib
import datetime
from Crypto.Cipher import AES

def checkTemp(tempLink):
    encrypter = AES.new('1234567890123456', AES.MODE_CBC, 'this is an iv456')
    decryption = encrypter.decrypt(tempLink)
    length = len(decryption)

    hash_code = decryption[length-32:length]
    data= decryption[:length-32].strip()
    hasher = hashlib.sha256()
    hasher.update(data)
    hashCode = hasher.digest()

    if(hash_code==hashCode):
        array = data.decode().split(",",5)
        print("expiry date is :"+ str(array[5]))
        return array[0],array[1],array[2],array[3],array[4]
    else:
        return "","","","",""

def createTemp(inviter,email,role,pj_name,cmp_name):
    delim = ','
    data = inviter+delim+email+delim+role+delim+pj_name+delim+cmp_name+delim+str(datetime.datetime.now().time())
    data = data.encode(encoding='utf_8', errors='strict')

    hasher = hashlib.sha256()
    hasher.update(data)

    hashCode = hasher.digest()
    encrypter = AES.new('1234567890123456', AES.MODE_CBC, 'this is an iv456')
    # to make the link a multiple of 16 by adding for AES with the addition of spaces
    newData = data+b' '*(len(data)%16)
    result = encrypter.encrypt(newData+hashCode)

    return result
#print(str(link).split(",",5))
link = createTemp("name","email@homail.com","Designer","Project Name","My Company")
print(link)
inviter,email,role,project,company = checkTemp(link)

问题是无法输出正常字符串,因为加密将导致几乎无法编码的字符,因此解决方案是使用binascii为我们编码BString并对其进行解码

import binascii
然后,我们为链接编码生成的可用字符串

hexedLink = binascii.hexlify(link).decode()
在方法中使用它之前,我们取消它的存在性

inviter,email,role,project,company = checkTemp(binascii.unhexlify(hexedLink))

我没有投反对票,但你的问题读起来像是某人的意识流。添加一些标点符号、句号和大写字母,以帮助读者分析您上面所写的内容。@Hooked谢谢,我是一个新手,所以我不太擅长发表我的想法,加上我有点沮丧,在试图修复它时迷失了方向,这让我更加困惑。无论如何,谢谢你的指点