RSA many primes: phi for repeated factors

It may be possible to factor N only if it is composed of many small primes. Try factordb.com or SageMath. The rest is textbook RSA decryption.

Note: If one or more of the primes are used multiple times, creating phi is a little different.

# 2 identical
assert p_1 == p_2
phi = (p_1 - 1) * p_2

# 2 identical + 1
assert p_1 == p_2
assert p_1 != q
phi = (p_1 - 1) * p_2 * (q - 1)

# 2 identical + 2 identical
assert p_1 == p_2
assert q_1 == q_2
assert p_1 != q_2
phi = (p_1 - 1) * p_2 * (q_1 - 1) * q_2

# 3 identical + 1
assert p_1 == p_2 == p_3
assert p_1 != q
phi = (p_1 - 1) * p_2 * p_3 * (q - 1)

# 3 unique
assert p != q
assert q != r
assert r != p
phi = (p - 1) * (q - 1) * (r - 1)
sage: n = 11976883600073589517586036218890790941510903302507834100496110626215757528392961
....: 272580596919990757219201877397519125253192238833551591339671104797730056393143427756
....: 229551027083966190850752574521809608536089676704023152324023558801462867715411652018
....: 474769802470149363510965976397340718720150422144473075649693632965977205420453552963
....: 933180293039726746233450432370235938070597627874532971273788803263016780500807163358
....: 986835444739716122026356592032335015432128070225129224801935825954681606834247438072
....: 008219081805277470773777332672468660614435325028811403540470653684001003909843061184
....: 38875893373327473
sage: n.bit_length()
1994
sage: factor(n)
32843 * 33427 * 33457 * 33521 * 34259 * 34261 * 34499 * 34501 * 35449 * 35753 * 35809 * 35863 * 35897 * 36467 * 36913 * 36947 * 37309 * 37337 * 37783 * 38261 * 38317 * 38593 * 39089 * 40093 * 40127 * 40343 * 40583 * 40693 * 41141 * 41413 * 41617 * 41641 * 41879 * 41897 * 41959 * 42473 * 42487 * 42611 * 42899 * 43133 * 43201 * 43411 * 43691 * 43753^2 * 43933 * 44281 * 44371 * 44531 * 44543 * 45439 * 45697 * 46273 * 46511 * 46549^2 * 47143 * 47147 * 47657 * 48193 * 48271 * 48383 * 48677 * 49411 * 49433 * 49559 * 49711 * 49957 * 50147 * 50707 * 51043 * 51131 * 51199 * 51343 * 51473 * 51613 * 52103 * 52177^2 * 53147 * 55073 * 55469 * 55621 * 55987 * 56041 * 56131 * 56369 * 57073 * 57493 * 57653 * 57751 * 58231 * 58367 * 58451 * 58771 * 59273 * 59921 * 60041 * 60107 * 60251 * 60257 * 60917 * 61231 * 61379 * 61417 * 61583 * 61927 * 62131 * 62171 * 62219 * 62351 * 62417^2 * 62819 * 62851 * 63097 * 63127 * 63281 * 63577 * 63659 * 63949 * 64319 * 64853 * 64891 * 64951 * 65071 * 65119 * 65129
from Crypto.Util.number import long_to_bytes

c = 103847869308772286068350812608946161310048471780108687445447082897960791832563296440399688011904014800812944419812110339595664973140355119639332857682984542320294869246885417325791635542758894672211270946494867768942190945299117352702305720351501541399290674333440435028192034483858344585064329968092445674146382885907678900307486892007932359930351596070322801270549377672369927342419317710725943361630295447168927334941260538714263133325932882367847844419538306475046130479602452615695686956103997902100355329048134993935472176473443887710947012922903378270936640012798675413677156658065250066093898
n = 1197688360007358951758603621889079094151090330250783410049611062621575752839296127258059691999075721920187739751912525319223883355159133967110479773005639314342775622955102708396619085075257452180960853608967670402315232402355880146286771541165201847476980247014936351096597639734071872015042214447307564969363296597720542045355296393318029303972674623345043237023593807059762787453297127378880326301678050080716335898683544473971612202635659203233501543212807022512922480193582595468160683424743807200821908180527747077377733267246866061443532502881140354047065368400100390984306118438875893373327473
e = 65537

primes = [32843, 33427, 33457, 33521, 34259, 34261, 34499, 34501, 35449, 35753, 35809, 35863, 35897, 36467, 36913, 36947, 37309, 37337, 37783, 38261, 38317, 38593, 39089, 40093, 40127, 40343, 40583, 40693, 41141, 41413, 41617, 41641, 41879, 41897, 41959, 42473, 42487, 42611, 42899, 43133, 43201, 43411, 43691, 43753, 43753, 43933, 44281, 44371, 44531, 44543, 45439, 45697, 46273, 46511, 46549, 46549, 47143, 47147, 47657, 48193, 48271, 48383, 48677, 49411, 49433, 49559, 49711, 49957, 50147, 50707, 51043, 51131, 51199, 51343, 51473, 51613, 52103, 52177, 52177, 53147, 55073, 55469, 55621, 55987, 56041, 56131, 56369, 57073, 57493, 57653, 57751, 58231, 58367, 58451, 58771, 59273, 59921, 60041, 60107, 60251, 60257, 60917, 61231, 61379, 61417, 61583, 61927, 62131, 62171, 62219, 62351, 62417, 62417, 62819, 62851, 63097, 63127, 63281, 63577, 63659, 63949, 64319, 64853, 64891, 64951, 65071, 65119, 65129]

phi = 1
for i, p in enumerate(primes):
    if p in primes[i + 1:]:
        phi *= p
    else:
        phi *= p - 1

d = pow(e, -1, phi)
m = pow(c, d, n)
print(long_to_bytes(m))