[英]Insert PyCrypto RSA decrypted text into mySQL db
试图从pyCryptos RSA加密函数导入一个字符串到mysql数据库。 数据库中列用户名的数据类型为varchar(256)。
这是我的代码:
# coding: utf8
from InstagramAPI import InstagramAPI
import mysql.connector
import sys
import os
from Crypto.PublicKey import RSA
filereader = open('public_key.txt', 'r')
public_key = RSA.importKey(filereader.read())
filereader.close()
username = "some_user"
encrypted_username = (public_key.encrypt(username, 32)[0])
这给了我一个字节的字符串,打印时给了我奇怪的字符。
现在,我尝试将加密的消息插入我的数据库:
connection = mysql.connector.connect(user = my_username, password,
host = host,
database = db)
my_cursor = connection.cursor()
message = "UPDATE accounts SET username=%s WHERE id=1" % (encrypted_username)
print( message )
my_cursor.execute(message)
connection.commit()
这给了我输出:
UPDATE accounts SET username=
�&/����a��w������J}������gG���I��-
�#Ʃ���'�60��,��<���~k��N�����(�9\��.����� ]��Ơ�U���2�c�f�Gĥ�
^rт ,z����o��k�����������y
^4�w1S���D��A��[3���x�脩�H_p����5h���s��y WHERE id=1����u|�����c�?
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
�(�9\��.����� ]��Ơ�U���2�c�f
更新:
只是做:
print (public_key.encrypt(username, 32)
给我输出:
('\x11\x86\x8b\xfa\x82\xdf\xe3sN ~@\xdbP\x85
\x93\xe6\xb9\xe9\x95I\xa7\xadQ\x08\xe5\xc8$9\x81K\xa0\xb5\xee\x1e\xb5r
\x9bH)\xd8\xeb\x03\xf3\x86\xb5\x03\xfd\x97\xe6%\x9e\xf7\x11=\xa1Y<\xdc
\x94\xf0\x7f7@\x9c\x02suc\xcc\xc2j\x0c\xce\x92\x8d\xdc\x00uL\xd6.
\x84~/\xed\xd7\xc5\xbe\xd2\x98\xec\xe4\xda\xd1L\rM`\x88\x13V\xe1M\n X
\xce\x13 \xaf\x10|\x80\x0e\x14\xbc\x14\x1ec\xf6Rs\xbb\x93\x06\xbe',)
加密和哈希是两个不同的事物。 如果您想要简单实际的SHA哈希,请使用:
import hashlib
hash = hashlib.sha256('text'.encode()).hexdigest()
print(hash)
输出:
982d9e3eb996f559e633f4d194def3761d909f5a3b647d1a851fead67c32c9d1
或者从hashlib文档:
>>> import hashlib, binascii
>>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
>>> binascii.hexlify(dk)
b'0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'
。
PS SHA256有64个字符,因此您的DB中不需要varchar [256]
编辑:根据您的编辑...
import binascii
binascii.hexlify(public_key.encrypt(username, 32))
print(binascii.hexlify(public_key.encrypt(username, 32)).decode())
另一种方式是:
binascii.unhexlify(public_key.encrypt(username, 32))
print(binascii.unhexlify(public_key.encrypt(username, 32)).decode())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.