Suraj Subramanya
Suraj Subramanya

Reputation: 11

AttributeError: 'bytes' object has no attribute 'encode' in Python 3.6

Upgraded My Python from 2.7 to python 3.6 facing issues while decrypting the password. If I put the encode() method then getting this Error "AttributeError: 'bytes' object has no attribute 'encode'" if I remove the encode() method getting "TypeError: token must be bytes" Below is the Code.

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
                                                                           

Error : without encode() Method

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

With Encode() Method:

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'

Upvotes: 0

Views: 4731

Answers (1)

Vishal Kamlapure
Vishal Kamlapure

Reputation: 590

I think u need to use decode while decrypting and also u have to first decrypt and then 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

I am considering you are using utf-8 encoding format while encrypting.

Upvotes: 1

Related Questions