在进行python2使用m2crypto进行rsa nopadding加密,但是升级python3后,m2crypto的库安装不了,windows要安装,也要一堆的支持包,这样的捆绑,果断废弃。经过网上收集大神的攻略后,这个大神(链接地址:https://www.cnblogs.com/pythonClub/p/10464745.html)的文章,很好的提醒了我具体的思路,然后顺便自己在java和php,自己debug,终于把python3 RSA nopadding的加密方法研究出来了。
Python3的RSA nopadding的代码如下(代码针对大神给出的有修改)。这就是加密的具体操作了。希望能对你们有帮助。
import os,sys
import rsa
import base64
from Crypto.PublicKey import RSA
import os
filepath = os.path.dirname(os.path.dirname(__file__))
message = '{"test":"1234"}'
class Encrypt:
def encrypt(self, message):
#rsa_pubkey = rsa.PublicKey(mm, ee)
with open(filepath + '/Util/test.pem') as publickfile:
p = publickfile.read()
#print("p=="+str(p))
rsa_pubkey = RSA.importKey(p)
crypto = self._encrypt(message.encode(), rsa_pubkey)
return crypto.hex()
def _pad_for_encryption(self, message, target_length):
# message = message[::-1]
max_msglength = target_length - 11
msglength = len(message)
print("msglength=="+str(msglength))
padding = message
padding_length = target_length - msglength
for i in range(padding_length):
padding += b'\x00'
print(padding)
return b''.join([padding])
def _encrypt(self, message, pub_key):
keylength = rsa.common.byte_size(pub_key.n)
padded = self._pad_for_encryption(message, keylength)
payload = rsa.transform.bytes2int(padded)
encrypted = rsa.core.encrypt_int(payload, pub_key.e, pub_key.n)
block = rsa.transform.int2bytes(encrypted, keylength)
return block
def str_to_hex(self,s):
return ' '.join([hex(ord(c)).replace('0x', '') for c in s])
en = Encrypt()
print(en.encrypt(message))