2016-12-06 3 views
0

Я создаю сайт в колбе питона & с использованием алгоритма AES библиотеки pycrypto. При регистрации веб-страницы я сохраняю зашифрованный pwd & зашифрованный ключ в текстовом файле. В странице входа, я сравниваю введенную PWD с расшифрованной PWD, используя ниже кодПроблема Decrytion в python с использованием алгоритма AES

def decryption(encryptedString,key_from_file): 
    PADDING = '{' 
    DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING) 
    #Key is FROM the printout of 'secret' in encryption 
    #below is the encryption. 
    encryption = encryptedString 
    key = key_from_file 
    cipher = AES.new(key) #### error comes here 
    decoded = DecodeAES(cipher, encryption) 
    return decoded 

def login(): 
    if request.method == 'GET': 
     return render_template('login.html') 
    if request.method == 'POST': 
     username = request.form['username'] 
     password = request.form['password'] 
     d2 = pandas.read_csv("Employee_Info.txt",header=0) 
     search_id = d2[d2['email'] == username] 
     pdb.set_trace() 
     if search_id.empty: 
      error = "username does not exists" 
      return render_template('login.html', error = error) 
     else: 
      pwd_from_file=search_id.iloc[0]['pwd'] 
      key_from_file=search_id.iloc[0]['key'] 

      if decryption(pwd_from_file,key_from_file) == password: 
       print "matching password" 
      else: 
       print "mismatch" 

, но я получаю сообщение об ошибке, как ValueError: AES key must be 16,24 or 32 bytes long.

Текстовый файл имеет под полями:

id,email,pwd,key 
qq,qq,h4vvEPuVNwjw22yJKz8QGg==,xéðjŸ¸AOݬ‡ 

ответ

1

Вы хранящую ключ в необработанных байтах Юникода, поэтому вероятна ошибка сериализации/десериализации. Кодируйте необработанные ключевые байты в шестнадцатеричном или Base64 перед сохранением в файле, а затем конвертируйте обратно в исходное состояние перед инициализацией своего шифрования.

Примечание: Хранение ключа в хранилище данных учетные данные является очень плохо и шифрования паролей для учетных данных проверки также очень плохо. Посмотрите на Why should I hash passwords и How to securely hash passwords для получения дополнительной информации.