繁体   English   中英

将PyCrypto RSA解密的文本插入到MySQL数据库中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM