def exp_mode(base, exponent, n):
bin_array = bin(exponent)[2:][::-1]
r = len(bin_array)
base_array = []
pre_base = base
base_array.append(pre_base)
for _ in range(r - 1):
next_base = (pre_base * pre_base) % n
base_array.append(next_base)
pre_base = next_base
a_w_b = __multi(base_array, bin_array)
return a_w_b % n
def __multi(array, bin_array):
result = 1
for index in range(len(array)):
a = array[index]
if not int(bin_array[index]):
continue
result *= a
return result
# 加密 m是被加密的信息 加密成为c
def encrypt(m, pubkey):
n = pubkey[0]
e = pubkey[1]
c = exp_mode(m, e, n)
return c
# 解密 c是密文,解密为明文m
def decrypt(c, selfkey):
n = selfkey[0]
d = selfkey[1]
m = exp_mode(c, d, n)
return m
if __name__ == "__main__":
'''公钥私钥中用到的两个大质数p,q'''
#p = 106697219132480173106064317148705638676529121742557567770857687729397446898790451577487723991083173010242416863238099716044775658681981821407922722052778958942891831033512463262741053961681512908218003840408526915629689432111480588966800949428079015682624591636010678691927285321708935076221951173426894836169
#q = 144819424465842307806353672547344125290716753535239658417883828941232509622838692761917211806963011168822281666033695157426515864265527046213326145174398018859056439431422867957079149967592078894410082695714160599647180947207504108618794637872261572262805565517756922288320779308895819726074229154002310375209
'''生成公钥私钥'''
#pubkey, selfkey = gen_key(p, q)
'''需要被加密的信息转化成数字,长度小于秘钥n的长度,如果信息长度大于n的长度,那么分段进行加密,分段解密即可。'''
# m = 1356205320457610288745198967657644166379972189839804389074591563666634066646564410685955217825048626066190866536592405966964024022236587593447122392540038493893121248948780525117822889230574978651418075403357439692743398250207060920929117606033490559159560987768768324823011579283223392964454439904542675637683985296529882973798752471233683249209762843835985174607047556306705224118165162905676610067022517682197138138621344578050034245933990790845007906416093198845798901781830868021761765904777531676765131379495584915533823288125255520904108500256867069512326595285549579378834222350197662163243932424184772115345
'''信息加密'''
pubkey = (140218042035580172420364932248555007367482790664685055083394324080147243394100961496086452391381422732357561718982205902666977156351465372055783527322300206627171949426523932629113893356603544562923187548724517705432927770612313751657683602943013823818882300883355701485072067598085910265646761088731994650173,25705)
selfkey = (140218042035580172420364932248555007367482790664685055083394324080147243394100961496086452391381422732357561718982205902666977156351465372055783527322300206627171949426523932629113893356603544562923187548724517705432927770612313751657683602943013823818882300883355701485072067598085910265646761088731994650173,23663328782351557594224589616581662009731194160801547129031883985982444732293716046295391187465964279827547276286512709814018552976178050339544397138541480740987411542113772600583939826494343243467033728202922302297834924035292893935329570297407718000372210731789693299686678289602502199271734009047980338137)
m = 0x516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73516f726f73454541083D7821567398303A39C6C17432EDE0AA9CB6ED
c = encrypt(m, selfkey)
print(hex(c))
d = decrypt(c, pubkey)
print(hex(d))
with open('hexEncryptedMessage.bin', 'w+')as fp:
fp.write(hex(c))
fp.close()
print('done')
RSA-1024
于 2020-03-02 09:16:33 首次发布