属性错误:'bytes'对象在 Python 3.6 中没有属性'encode'



将我的Python从2.7升级到Python 3.6,在解密密码时遇到问题。如果我把encoder((方法,那么得到这个错误";AttributeError:"bytes"对象没有属性"encode"如果我移除encoder((方法;TypeError:令牌必须是字节;下面是代码。

import requests
import json
import pymssql
from pymongo import MongoClient
from datetime import datetime
from cryptography.fernet import Fernet
encrypted_pwd='gAAAAABfcsCIlNNosZ2bWzUDueAVoIPjUFOqjNCOIOTUrOkrf_TK2FaC1L5b0VXo2ZKBz1VYA25jVfXBQQ5Y-vwTZA7339onZw=='
def vantiveDvDBConnection():
conn = pymssql.connect('abc.def.ad.is.net:5010','itcompl',decrypt_message(encrypted_pwd), 'VN2DV')
return conn
def decrypt_message(enc_message):
print("inside decrypt")
key=load_key()
print(key)
f=Fernet(key)
print(enc_message.encode())
decrypt_message=f.decrypt(enc_message.encode())
return decrypt_message
     

错误:无编码器((方法

inside decrypt
b'SV2DdXmRqkVRpK70yZOdEo1jlPx4mYrlUPYU5kpI0ds='
b'gAAAAABfcsCIlNNosZ2bWzUDueAVoIPjUFOqjNCOIOTUrOkrf_TK2FaC1L5b0VXo2ZKBz1VYA25jVfXBQQ5Y-vwTZA7339onZw=='
Traceback (most recent call last):
File "dearvntaccessreview_report_dev.py", line 11, in <module>
vantive_conn = utils.vantiveDvDBConnection()
File "/tmp/CC-3145/commonPythonUtils.py", line 37, in vantiveDvDBConnection
conn = pymssql.connect('vntdvdb01.savvis.ad.savvis.net:5004', 'itcompl',decrypt_message('gAAAAABfcsCIlNNosZ2bWzUDueAVoIPjUFOqjNCOIOTUrOkrf_TK2FaC1L5b0VXo2ZKBz1VYA25jVfXBQQ5Y-vwTZA7339onZw=='), 'VN2DV')
File "/tmp/CC-3145/commonPythonUtils.py", line 92, in decrypt_message
decrypt_message=f.decrypt(enc_message)
File "/usr/local/lib/python3.6/site-packages/cryptography/fernet.py", line 75, in decrypt
timestamp, data = Fernet._get_unverified_token_data(token)
File "/usr/local/lib/python3.6/site-packages/cryptography/fernet.py", line 94, in _get_unverified_token_data
utils._check_bytes("token", token)
File "/usr/local/lib/python3.6/site-packages/cryptography/utils.py", line 29, in _check_bytes
raise TypeError("{} must be bytes".format(name))
TypeError: token must be bytes

使用Encode((方法:

inside decrypt
b'SV2DdXmRqkVRpK70yZOdEo1jlPx4mYrlUPYU5kpI0ds='
b'gAAAAABfcsCIlNNosZ2bWzUDueAVoIPjUFOqjNCOIOTUrOkrf_TK2FaC1L5b0VXo2ZKBz1VYA25jVfXBQQ5Y-vwTZA7339onZw=='
Traceback (most recent call last):
File "dearvntaccessreview_report_dev.py", line 11, in <module>
vantive_conn = utils.vantiveDvDBConnection()
File "/tmp/CC-3145/commonPythonUtils.py", line 37, in vantiveDvDBConnection
conn = pymssql.connect('vntdvdb01.savvis.ad.savvis.net:5004', 'itcompl',decrypt_message('gAAAAABfcsCIlNNosZ2bWzUDueAVoIPjUFOqjNCOIOTUrOkrf_TK2FaC1L5b0VXo2ZKBz1VYA25jVfXBQQ5Y-vwTZA7339onZw=='), 'VN2DV')
File "src/pymssql.pyx", line 636, in pymssql.connect
File "src/_mssql.pyx", line 1964, in _mssql.connect
File "src/_mssql.pyx", line 611, in _mssql.MSSQLConnection.__init__
AttributeError: 'bytes' object has no attribute 'encode'

我认为你在解密时需要使用decode,而且你必须先解密,然后解码:

def decrypt_message(enc_message):
print("inside decrypt")
key=load_key()
print(key)
f=Fernet(key)
output = f.decrypt(enc_message)
decrypt_message= output.decode('utf-8')
print(enc_message))
return decrypt_message

我认为你在加密时使用的是utf-8编码格式。

最新更新