python3实现RSA NOPADDING加密

      在进行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))
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值