It works when I encrypt and decode from string in same script, but when sent to DB looks like error with base64 encoding.
Error: Traceback (most recent call last): File "tmp2.py", line 82, in <module> main(1) File "tmp2.py", line 73, in main string = getCode(id,'ev_details') File "tmp2.py", line 23, in getCode result = base64.b64decode(row[0]) File "/usr/lib/python2.7/base64.py", line 76, in b64decode raise TypeError(msg) TypeError: Incorrect padding Script: #!/usr/bin/python import zlib,MySQLdb,os,sys,urllib,re import os,hashlib,base64 from cryptography.fernet import Fernet from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC from Crypto.Cipher import AES from pbkdf2 import PBKDF2 conn = MySQLdb.connect (host = "localhost", user = "root", passwd = "pass", db = "db") def getCode(id,tbl): sql = "SELECT `details` FROM %s WHERE `id` = %s;" % (tbl,id) # print sql cursor = conn.cursor () cursor.execute (sql) row = cursor.fetchone () result = base64.b64decode(row[0]) # return row[0] return result def getEncrypt(id,tbl): sql = "SELECT `encrypted` FROM %s WHERE `id` = %s;" % (tbl,id) # print sql cursor = conn.cursor () cursor.execute (sql) row = cursor.fetchone () result = base64.b64decode(row[0]) # result = row[0] return result def encryptMAIN(data,fun): password = b"This is the password!" # salt = os.urandom(16) kdf = PBKDF2HMAC( algorithm=hashes.SHA256(), length=32, salt='42$ahasdkjfha', iterations=100000, backend=default_backend() ) key = base64.urlsafe_b64encode(kdf.derive(password)) f = Fernet(key) if(fun == 'encrypt'): return f.encrypt(b"%s" % (data)) else: return f.decrypt(data) def encryptDATA(data): cipher = encryptMAIN(data,'encrypt') return cipher def decryptDATA(data): decoded = encryptMAIN(data,'') return decoded def insertBin(id,data): data = '%s' % (data) sql = "UPDATE `sec_details` set `encrypted` = '%s' WHERE `id` = %s;" % (data, id) # print sql cursor = conn.cursor () cursor.execute (sql) conn.commit() return 1 def main(id): string = getCode(id,'ev_details') e_out = encryptMAIN(string,'encrypt') insertBin(id,e_out) print "Original Data: " + string string = getEncrypt(id,'sec_details') print "Encrypted Data: " + string dout = encryptMAIN(string,'') print "Decrypted Data: " + dout main(1)
_______________________________________________ Cryptography-dev mailing list Cryptography-dev@python.org https://mail.python.org/mailman/listinfo/cryptography-dev