目前掌握Python代码:
import rsa
#模
m = "ae068c2039bd2d82a529883f273cf20a48e0b6faa564e740402375a9cb332a029b8492ae342893d9c9d53d94d3ab8ae95de9607c2e03dd46cebe211532810b73cc764995ee61ef435437bcddb3f4a52fca66246dbdf2566dd85fbc4930c548e7033c2bcc825b038e8dd4b3553690e0c438bbd5ade6f5a476b1cbc1612f5d501f"
#指数
e = '010001'
#加密参数
message = '123456'
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__':
en = Encrypt(e, m)
print(en.encrypt(message))
输出: 2ab11a1d49a4d0ba2a7cc67135219be2444229fff08eb3f869200a545833f55bd00e25dc96b5126c9649b08f953ecc0e9a2d0d9650421061cafb1e52a4b8bdbb336e662eddabd1158b16f7c5a14d29c9009e506bbdccd2af0bf94061642423173f01765bf494d6a139872b4b10535559acd2eaed3cfc8c1858764e99716bc19b
结果是唯一确定。
最近在网上查阅资料后发现网上的JAVA RSA相关实现无法满足上述需求,在此求一JAVA的RSA加密算法能够满足上述需求。
给定 模 和 指数 以及message能够得到唯一加密字符串。