вычислить q с gmpy2 в python2 и python3, но результат будет другим - PullRequest
0 голосов
/ 09 мая 2020

Я хочу вычислить q в задаче RSA. Код:

import gmpy2
n = 0x9aeb7f60ababfd1c1a23f033068a5f5397832567fd116dd468bf2607ddc0ce34e172cc6029cf9f1c4ed9bc50ce228a164e6c2a9c5f9a6c2d98b8dd762cfc9cc08228c8e5b6327054d992afad9a49655e20f7822d3cc5e55ae0810851694d118a2efaa1658a14d9575facbec5aa0be21bfeb9c2a0e19344841664e40847ab865b5c1170744436fa5150b8e0e560beb67115c511b811875f91ace6d243cf44de0af8cc68c469df938dbbba378e05a9285ee0b5fd6d8cf9fb3b742061404096ad2a37bbf9aec7b944be3252e531eebaf44e127e3395ef870d378681b1db9c9996943e204fd0467b091995edc837d9056a09900c85e10e424d3be069fbc08e5463a7
#print(n)
e = 0x10001

p = 0xd60447478bf0d9f65c0795df7b71e676f2adc839e4381e845e91cd9026386f580bf146b43bf6309478ddd30c2339b3022f567ed1c437ebb30c04563f88261ea6fdec76f79debcb9835513fd28f9c07e9f2a4117ab1b20450f9acdc01c0cf66b4ae0ec2331f3fb34dbd4709321744a1eac86b19b2f89f4cba5e808808ddabcc89

q = n/p
print(q)
assert p*q==n 

в python2 результат: q правильный

И код в python3:

import gmpy2
n = gmpy2.mpz(0x9aeb7f60ababfd1c1a23f033068a5f5397832567fd116dd468bf2607ddc0ce34e172cc6029cf9f1c4ed9bc50ce228a164e6c2a9c5f9a6c2d98b8dd762cfc9cc08228c8e5b6327054d992afad9a49655e20f7822d3cc5e55ae0810851694d118a2efaa1658a14d9575facbec5aa0be21bfeb9c2a0e19344841664e40847ab865b5c1170744436fa5150b8e0e560beb67115c511b811875f91ace6d243cf44de0af8cc68c469df938dbbba378e05a9285ee0b5fd6d8cf9fb3b742061404096ad2a37bbf9aec7b944be3252e531eebaf44e127e3395ef870d378681b1db9c9996943e204fd0467b091995edc837d9056a09900c85e10e424d3be069fbc08e5463a7)
#print(n)
e = gmpy2.mpz(0x10001)

p = gmpy2.mpz(0xd60447478bf0d9f65c0795df7b71e676f2adc839e4381e845e91cd9026386f580bf146b43bf6309478ddd30c2339b3022f567ed1c437ebb30c04563f88261ea6fdec76f79debcb9835513fd28f9c07e9f2a4117ab1b20450f9acdc01c0cf66b4ae0ec2331f3fb34dbd4709321744a1eac86b19b2f89f4cba5e808808ddabcc89)
#print(p)

q = gmpy2.mpz(n/p)
print(q)
assert p*q==n

Результат: q неверно

Почему это произошло? Что-то не так в gmpy2 в python3?

...