Разрешение пароля любой длины Crypto - PullRequest
1 голос
/ 07 мая 2020

Я нашел следующий код для шифрования файла excel в python. Однако я заметил, что он может использовать только пароли / ключ длиной 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)
...