import rsa
class Encrypt(object):
def __init__(self,e,m):
self.e = e
self.m = m
def encrypt(self,message):
mm = int(self.m, 16)
ee = int(self.e, 16)
rsa_pubkey = rsa.PublicKey(mm, ee)
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)
padding = b''
padding_length = target_length - msglength - 3
for i in range(padding_length):
padding += b'\x00'
return b''.join([b'\x00\x00',padding,b'\x00',message])
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
if __name__ == "__main__":
m = '86584afb2a8d053ff3bbe054c628521334b40a1e9f0a33308fc95fe8eea227d822a5ea45cfad9bd1c5f89fdb46c5180bfc20f44202fa2d474260e6bca9ffa2d221365f142cd7a022fa8aead20a33f3991447fb085d84b144154f3f728a69166320b3c23745ac464b081add448753f0c8a8c0afe0ef9fbcb7a10710339421c0d7'
e = '010001'
message = '12345678'
en = Encrypt(e,m)
print(en.encrypt(message))
Python RSA加密 公有指数+模数生成公钥 进行nopadding模式(填充数全部为0)的加密,每次结果一样
最新推荐文章于 2024-07-23 17:21:35 发布