Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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 允许密码为任意长度的密码_Python_Encryption_Pycrypto_Pycryptodome - Fatal编程技术网

Python 允许密码为任意长度的密码

Python 允许密码为任意长度的密码,python,encryption,pycrypto,pycryptodome,Python,Encryption,Pycrypto,Pycryptodome,我发现以下代码可以用python加密excel文件。但是,我注意到它只能使用长度为16或32个字符的密码/密钥来加密文件。我希望用户能够使用8-32个字符的任意长度密码来加密文件。我在想,也许用户可以输入一个8个字符的密码,然后我可以添加一些填充字符,使其长度达到16。然而,这似乎不是一个被使用的想法 因此,我想知道如何创建不同长度的密钥来加密文件 def pad(s): return s + b"\0" * (AES.block_size - len(s) % AES.block_si

我发现以下代码可以用python加密excel文件。但是,我注意到它只能使用长度为16或32个字符的密码/密钥来加密文件。我希望用户能够使用8-32个字符的任意长度密码来加密文件。我在想,也许用户可以输入一个8个字符的密码,然后我可以添加一些填充字符,使其长度达到16。然而,这似乎不是一个被使用的想法

因此,我想知道如何创建不同长度的密钥来加密文件

def pad(s):
    return s + b"\0" * (AES.block_size - len(s) % AES.block_size)

def encrypt(message, key, key_size=256):
    message = pad(message)
    iv = Random.new().read(AES.block_size)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    return iv + cipher.encrypt(message)

def decrypt(ciphertext, key):
    iv = ciphertext[:AES.block_size]
    cipher = AES.new(key, AES.MODE_CBC, iv)
    plaintext = cipher.decrypt(ciphertext[AES.block_size:])
    return plaintext.rstrip(b"\0")

def encrypt_file(file_name, key):
    with open(file_name, 'rb') as fo:
        plaintext = fo.read()
    enc = encrypt(plaintext, key)
    with open(file_name + ".enc", 'wb') as fo:
        fo.write(enc)

def decrypt_file(file_name, key):
    with open(file_name, 'rb') as fo:
        ciphertext = fo.read()
    dec = decrypt(ciphertext, key)
    with open(file_name[:-4], 'wb') as fo:
        fo.write(dec)

encryptPassword = "some 16 or 32 character password"
key = encryptPassword.encode("utf8")
encrypt_file(excelSheet, key)

您似乎混淆了密钥和密码的概念。它们是两种不同的东西。您可以通过将密码传递给服务器来使用密码生成密钥。这会将任意长度的密码转换为固定长度的密钥,您可以使用该密钥进行加密和解密。将密码转换为密钥的过程也应该相对简单,以使暴力攻击更加困难。您似乎混淆了密钥和密码的概念。它们是两种不同的东西。您可以通过将密码传递给服务器来使用密码生成密钥。这会将任意长度的密码转换为固定长度的密钥,您可以使用该密钥进行加密和解密。将密码转换为密钥的过程也应该相对简单,以使暴力攻击更加困难。