将 PyCrypto RSA 解密文本插入 mySQL db
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\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'
.
P.S SHA256 有 64 个字符,因此您的数据库中不需要 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())
我想将字符串从 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\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'
.
P.S SHA256 有 64 个字符,因此您的数据库中不需要 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())