2016-12-06 7 views
0

pycryptoライブラリのAESアルゴリズムを使用して、Pythonフラスコ&にウェブサイトを構築しています。サインアップウェブページでは、暗号化されたパスワード&をテキストファイルに保存しています。ログインページでは、私はコードAESアルゴリズムを使用したPythonの解読問題

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" 

の下に使用して、復号化されたPWDで入力された障害者を比較していますが、私はValueError: AES key must be 16,24 or 32 bytes long.

テキストファイルとしてエラーを取得していますと、フィールドの下にあります。あなたが保存している

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

答えて

1

をキーは未処理のUnicodeバイトであるため、シリアライズ/デシリアライゼーションエラーが発生する可能性があります。生のキーバイトを16進数またはBase64でエンコードしてからファイルに格納し、次に暗号を初期化する前にrawに変換し直します。

注:資格情報のデータストアにキーを保存するには、非常に悪いあり、そしては、証明書を検証するためパスワードを暗号化することも非常に悪いです。詳細については、Why should I hash passwordsおよびHow to securely hash passwordsをご覧ください。

関連する問題