为什么pycrypto在使用两个不同的公钥时会返回相同的加密结果?

时间:2016-04-07 02:52:29

标签: python rsa pycrypto

我用openssl生成了两个密钥对:

openssl genpkey -algorithm RSA -out ndkey.pem -pkeyopt rsa_keygen_bits:1023 -pkeyopt rsa_keygen_pubexp:3

我使用pycrypto使用原始RSA为两个公钥加密密码:

key1 = importKey(open('pkey.pem'))
pk1 = key1.publickey()
enc_data1 = pk1.encrypt(text, 1)
# print enc_data1[0]
f1 = open('encrypted.1', 'w')
f1.write(enc_data1[0])
f1.close()

key2 = importKey(open('pkey2.pem'))
pk2 = key2.publickey()
enc_data2 = pk2.encrypt(text, 1)
# print enc_data2[0]
f2 = open('encrypted.2', 'w')
f2.write(enc_data2[0])
f2.close()

print key1.n
print key2.n
print '({}, {}, {})'.format(key1.n, key1.e, bytes_to_long(enc_data1[0]))
print '({}, {}, {})'.format(key2.n, key2.e, bytes_to_long(enc_data2[0]))
print enc_data1 == enc_data2

结果:

22446587435783322535029926755522036093675835913290096371282649374261751886779792158268506193653741624694526861855388271128220343487285072455172348728517611812702642248438921952478917230370355877411774793976036676098428192127612807541759106243552886208613574681618562399678299666931976649794119197607602009750603778388548285240483011272063617594153157862753765694060756437470380792465477448634937898772420338613993398024699219918370034214455085868046146614573532274141958156157669859296150827240202401991892690879375285068011539679340140386717637063432283626051255917883375261840829071425328178052796156585434620172339
27173517653161146721399399483321106051348494833126656892132038343853315394541987081201985517940371665296451046896427324444405991983593681459775927250781326318134023191438693906225250446425515737352497760790346987933424933378740267054765665975297294346138266451296229352298302247469480080897832820929109398112519858525971582557120594702836884498254069262704265059341307982026489056555170273623524529550647132999158193858003667551632101384236498921133041585007229051277169868413556175970329043233718304735481129875181130029006556378684002155199475307210851127922382666215752506594372446312743297408737452007324664998721
(22446587435783322535029926755522036093675835913290096371282649374261751886779792158268506193653741624694526861855388271128220343487285072455172348728517611812702642248438921952478917230370355877411774793976036676098428192127612807541759106243552886208613574681618562399678299666931976649794119197607602009750603778388548285240483011272063617594153157862753765694060756437470380792465477448634937898772420338613993398024699219918370034214455085868046146614573532274141958156157669859296150827240202401991892690879375285068011539679340140386717637063432283626051255917883375261840829071425328178052796156585434620172339, 3, 8919260869834175894157597887369949260094875703418884180570952000)
(27173517653161146721399399483321106051348494833126656892132038343853315394541987081201985517940371665296451046896427324444405991983593681459775927250781326318134023191438693906225250446425515737352497760790346987933424933378740267054765665975297294346138266451296229352298302247469480080897832820929109398112519858525971582557120594702836884498254069262704265059341307982026489056555170273623524529550647132999158193858003667551632101384236498921133041585007229051277169868413556175970329043233718304735481129875181130029006556378684002155199475307210851127922382666215752506594372446312743297408737452007324664998721, 3, 8919260869834175894157597887369949260094875703418884180570952000)
True

这是什么意思?

1 个答案:

答案 0 :(得分:1)

你的"加密" value是整数的立方体,它等同于文本"明文"的ASCII代码(以bigendian顺序)。因为你的明文价值很小,你忽略了每个主管来源的建议,包括维基百科和the pycrypto documentation以及使用过的教科书'使用e = 3的RSA(无填充)使其更糟糕,计算msg^e mod n 实际上没有包裹并使用mod n部分,从而提供绝对零安全性。 / p>