質問

题目描述.txt
ciphertext.txt
oracle_transcript.txt
public.txt

解出flag 根据这四个文件

Python

python
from pathlib import Path, PurePosixPath base = Path('/mnt/data') for p in base.iterdir(): print(p, p.stat().st_size)

Python

python
print(Path('/mnt/data/题目描述.txt').read_text(encoding='utf-8'))

Python

python
print(Path('/mnt/data/public.txt').read_text())

Python

python
pub = Path('/mnt/data/public.txt').read_text().splitlines() len(pub), pub[0][:100], pub[0][-50:], pub[0].count('.') (3, '75b8da92a0a4caf5cc838133cf138aa114d10cdcd05a4664dba48417b3ab64959c7f56dfb5fd05bb8165b069f22466f4c384', '7fe082c4db085ca2f71443932e76fe91cb3bf14def5138d223', 0)

Python

python
len(pub[0]) 512

Python

python
ct = Path('/mnt/data/ciphertext.txt').read_text().strip() len(ct), ct[:100], ct[-50:] (512, '464c1b4adee3731c5372f912385ae67ba74055f282118e8cedbbaedc389d8902d355c9f9fc0abdc5442a15014c167e56b0eb', '681a84cc39b6f8449749dc351a2b1e32c20be29ae1699b4fe8')

Python

python
ot_path = Path('/mnt/data/oracle_transcript.txt') with ot_path.open() as f: for i in range(60): print(f.readline().rstrip())

Python

python
lines = ot_path.read_text().splitlines() lines[0:25] ['1 2', '1 2', '1 3', '1 3', '1 4', '1 4', '1 5', '1 5', '1 5', '1 6', '1 6', '1 7', '1 7', '1 8', '1 8', '1 9', '1 9', '1 a', '1 a', '1 b', '1 b', '1 c', '1 c', '1 d', '1 d']

Python

python
import re, itertools # Check unique first tokens first_tokens=set() for line in itertools.islice(lines, 0, 10000): if not line.strip(): continue first_tokens.add(line.split()[0]) first_tokens, len(lines) 82e40f95f085cd5dc7f9cd70c0503c04ff13e3aae443ae1c3e8aea55211748c0f4ec92fed366e2b8ea8b20e0c7692e4dac957c2e9d09042eaf9ce6214438ab47e47911e32ec41492f6d7afc3b7d5171f8e53fb24d1cc464ed6d1e1889d196e25e9f9a275d31beafcdbc4abcc45bdd45252a7a059f433d8770cae918148226086640d2971c92d37f648d148a78d942a00736a37e373b86bf82', '61e733319cb90da756067e22d73d202bb7401877041f2bd67d0c178e043fc155caeadc98185116dd28758395a2c7ff5cdb177b2991918776931a7312a90fa879da73b9714aaab6ad8f80a46c683fb69c9a53699f0b594f39b127d305f8320580c3a1b1c2c74759703597b1bac57fc1be0a376a82e448c8f0e55bb13ad55632f43939561a707ce8ce899f048b281dca94436fc0f85be4b86091f4719491b3e6aa5253e85ae7586baf12935c19440b75eaaceea426277f7a6a441ced3130b997dfb3fe7324293757cb35d6c7596b9986dd604c24ea27862545007a117037f370d11666410d7a9b898d011374f0d69eeaed3cf6d37a261f77e2e4ee74e9a064328', '291396a0c673d15fc43262cf1c4910117f1aeccc121d18d6fa9caa34bfae88c1e8bf7cf55b826aa1b7a2085a616a27d6fcd6a0b700e6f03c8b2b0b97d1baae605d1eae1eb53ba27cf8ea3eb3fc5496cae6be038990814de8876eb8b5ee1fedfe71d2514e050e10c0f8a3ed501f8af10b3c74c304df06099b9505764d35373f9e1ea934408842c391cd7b4616fd271490085755f5ff2dd50b0bc05c02b006f4611173979067729a90a24245a72c2486d9cd97783326bccd824489bb5b84831bfe0021dfd7c5eaf6b02dfe7a274f19f8c3151b0faaa25341c94070e675dd6ce6d6498fe15fe904682b7b8def4d08341bca1073ea601457e686ef4f4da5481cc5f9', '1aac039658388e7f9420ef114d3e21889c2665961ea51c9b22851b8fd654ec48428e14734a98e49e583d6b425979c23a8d9a151659f478b0e38e3c946801c97ca86f95b62119930ab41e5254c77af9f283ff91e3405112468ac7d135bd8138da1e4a169dfd755eeca6b2fd89a578148529b9aef2d0189a5e39c93c38523d5f0d3f1c5e20c968fe0a78e81643052d548f266d05f088adf77967585866afda22ba786f4f50233657ffc34477736903fe581876c46b31115b3a93947e838ec42135e20032f48adadcc5ab0b31a3e693a313ab7543ad59b65a1d6524524b7503ebec28dc3968fe20d8861049dcb1ac0c43008159eea756488ca1405f0810ec4476c7', '7422346d51761a4f7352db9a8739e133d8cc8dea6e2afa03b174507e7b96d3b4836c5ad27d2c4b3e4b53b1cefae28c4af65aa8ab0465976cf40f5cc74566c36d05dd0c90480696f9c4b0cc740956bda9c0a1dfed346a49c21dabe7e795bedffa4e8df45471ae7389bc75c30839463db55194bd3ae0e36bf65ded3947282235a9131e49cae242749d8d19866c86334a5960e2a239776d64f81af9299154ed770d4cb70c1e394a7f017b7011d7a639d1789b093e3b18a5c7b20ed829af1da48e0ed17eefb599e29d7cca97a7cf11f3bad185f7d6a885301f3bfd0c001a7544e6e0f1593f3413bb5b702e80f1a5b51a2a58539d18a130b3b59b6807ba310d03f70c', 'f242a8d6ecabb1d2c68f7a6837973b568df3f893aa9507a694277354354038f72fc3e908b8e0e3a3a8fce29ec66b301dd188f24314e7365fcfb3fee7b58b689959281c4273d7c468f307cbc495cdd4ed4df6174804d5c0195b0c07872bbae39eaa0fbe91f769da396a998d594104ce6c5e4973a9644e51089ef7d91b3ffb32f6b966e37e379a8167be9f8c3b935049b28782c528f8025ea276ceca72e13bb9ccd46472f879230c1aea07f84791b3ddaaf050f980b800b15785bc7ae35e1fd8b51217604d3310e09477601e0b1795c68ac06a397e58476b8d2dd2f7e5931d1b084d33c3d498a49e30034e52dc3d3297ad220486f041fcf53b48b10217f58c093', '5966e5b980f17fab623052dd9440ad429c2f6ee9c52682360e3ce6bf34980ea18b154c937fcecfc0d412dceb3fba6707f4fd61323d04b5cab9322242f7207c6958488f78954a4e7a0b5430494e5cda203d528254e13a81dd8e0560159333cde474abf76e392c79223a72fa13f1ffccc2c2072c27e75f451805f077e8a11a8aa9ad747070a9445c4dde3d10d1150c81306463c8c1c7ef61b00f39f7348442a9cc6b92ce628e3906e97a207a0ce267b2fc8c3dd06d2d5ed82f9155db841ee236a33f310d065ec18910cc6b699ec3c39602620c9e1882d256f4977c7a42e3bbbaef7281ec22e11003690437a3a0736a3ed13c69c579589d6ae8b1c8d3ec4f8a8408', '636ec220c882efc8003f16dab399ef75910ff85e71d77c3f7cd6ddad7ce6ed1573ad7c19ea4115cc0b8b97ca211c93a885dde3668bfefb1984eed359a52e9b96e09b0b3e84615e3ab0a1701d60590df5eec513a82e04175d02dd4ade9fc74cb8ad72214b0a3d93353007e0eaafa366ad6e19a67e89b17446a855a6bc64387067e999fe1ffc0c7a6e9db660bf4a741b509db6fbc53dd5e760c4747c971f1ebd266967b41f815c28ba9b86bbcc373d996de2e48891643e7937ca4c0f1af3812c0e5a6ca3fe8424fb97e1cdd4e48a66a5901c87fcfd2a68a1f08ce2c0eec46c9d33cd8d60ba9381255fee10615bf5eeae2890add9ca15d02d426520905e47babfd3', '70e740a9023e5a25f43ea15679300a043a80f84e4cbc245738bd8fff421b6f2cb7eab86af57e5281bfc0d378013e5ab4f5d12b2aec78bb3fb44545cd41017e787166685c15a733b4c6ef9a23c1f6a9d949132e879c869b58cae730f1d2ff219ca37765d39a6ef2895b84f0ba359a1c5b1bdbea14b2fb39f4ab1bd7512afd72ef4320f28b6d051e2cf544f4058337094e7f69dc7f250638516cdda8a34e3fbe89f397185d635b60ca8bc099fdab5edeba7a315a5e1b6783049fc7820b73288db80baee2cb6ead25f8cc1f4873c808ecb31726c590975480ae06e6007b3bc1d2503ba96ff4d308f97c73b704181557e354d3dbe58e4f2ea6692cff1e3b07252c9b', '2d2f67271d8ba9f7dd396ccc6ae388495366f649c2bf2cf9f0b8aeb635e9ca1678df3836a5c8d3f0885a5dfcfed832fe2c7bca2a0efd64a4aed82d9822fd6583d6b75e48d1c8e1ba1493d5937683a68a6e454fa43a58c0f6c00f52f033df52c727b0905645480fbb002b79da2faa427ad6b1f7d2873846cec5b23b1a149dae51d215d0e66de607a0b76393b8302cb90a5815dbbc9e2c7fd3b2f82c811da77441a1ea80514b15923380e38c92426b2a02b0c737d5d4833398b2c9120fd8de2bd5789cbfc3e4462a916c0fef47280e4993a5b63d6c45febb3f3f6814e25e3cd1060ab46b0b8806b9fdfb44b5306fc5e9046335ac17bd6255d7157f1ebfc92f2e12', '35b5efdefb2c08c0dbdcf816b35b412293ac6e7fb12624323f4952400ad265155aafd1dce73bfa9bec1cd4778369f41895399c22e08d7ce0f247aca91994bdd2af98a712afa5335cf5bc30809c5d2ef0fb5d31d684704d2a03f2e5b2397906a2518c3062aa673b60259b7616984e5423b00082493cf1640eb18f49a9fd67885afb37b471036eff41798ce719b1b868b0b128478789a01e7fda6abd34da2fa3f7f5510dc0c2ec923b7a21f21ec916df63ab42ef56b63615d6d7ca58c9d0b8393e176b2b225447a109a86117297f6d9e58f25d85847443808cde1087086f5f57b50e58134b0a28cade8185fa019d34e993dca8224f65a592a8b0a55816c792af40', '40fe9f0f8e91a82aca3794d44b7b80714048f506fc3203a403dd3fa0cae5cb76d3c89f0bed2b403216b8e1c213121bc8a9f5f53f658986376da9661d3933fabaa7ac7cddca201ff4c6b080ab27a2ce3c4da3393691d042aba684504e2a7c4f0f2c3dcccaef8c5d9ba85e4972831a423c3dd0e141f949831b89e770c623e5bafac2b1315de11bb3d36944e6abae9755f1c9db19ab743fdbf5fcf2bddf2430369384ed818f403773a01d5237d9fe0115d0d8cb5a695a370c0014b1c9db426cbb5480998378a26f3738da3a8e36e70d16810416bc1378c4aead30e7f1e75815b137fb18c72e42b608365e8d0b4e297917c2a3c7dc163c94f368b0510a49b3298ab6', '6e030a02c5ef0ae4616ccd91acb1614263e6168bc5ce4e4dcf032c15cf3f95ac6bb84dbb8b315ea72f2cac174fa563606886814d6f665c4e91676fc47daf867fc7e3502065e7e19c8ff8c3c92dc5761b3f90310fb5443d3824983862ff2975b6959c050dc0b9cd13190c21937d966ea25f1172554206254eb33f6663fed14fc3884311de2cd581ca1e766dc9a41db0bcf4d5d47b8cc9db52ca69da070b6553720c9a7f481853941e4dbcf4c400af74b614b4467ff27f42902923ed587444ae3bd6647bb31210ebd65dc8137c723c658d53a8929bd67d705591476c04e4f1df79c4305884078d1950c3ab65765cc8d74ed9fe3ca7674693de22b8c2e002845de3', 'abdc691953215633e9fdafaf01eb694ee361f2a97f65ac95102d6e2c250da1361b3828b435ea951c4187e66474bbea9a39a2b71be68aebd0cc95958faa97900c4a9d1bbf86720984da28d3a19a53b48647f542c8c007465c490c11b3f4a49de965cf26b45a1dda44ec0ecc78108eb096bbd55ec1a987e59f7e55ca11c10c3b8328599594cced2c75bad83152261743c93e138d76348f9e0272b84a71f0269559f0a3921511c81892056b3baf9adc7e308310219af8176409c03e5141a5ff28f0f26c5cc4537362b98ba3fab682da5864d6280279478d88141548000a839c6f7bacb04fbf3f20e8eacb559a4b1b462b4aae867cd2be8a2271bad670d8a529d11', '5286818f216b023f0761253ac79061a478d18f6f73a200bc33bb319a614b43fb06257580ac5d465551b7da41b8a53056a13970db35bb960b9a0c487eca3333f49b9285da26ec7077022c8a2e2505cf3d87929ade67ef7a52593edc6c2b42179e19be93fb162a0ef76c22e2744823bb76400e670e426b8cea81b0be81e5387d32418e1057338b67ea6d8f008e20a3c810008882e0053b96a60d847a31c36648c6ea1323c71e22cbc82a6875997cf85c17fedab81893b2c01b0c5610b3b03c70ca944b827f603ef55aefcc09149ae109b0c9369a9bb88623227474af3aba47f7c2dc85370e4268a1c48339055f8386e4743f5b298b7f13c6104c2306b4147e07b3', '10946c7237d06338e1b6927cda5d915a34126bdd4f6ca3571ae57bad43a800bee94242d72cce48d42722b0fb49728f2a88d22951539b340ba69614e772b912bb436ebd3315d9401ef4f8eb04b3803a888384944b097eb8a6ab19bfdfd53a329b127d3912f3525c7294912612e4d2687172317555b44b1f4ecf7df007869b4cfed09864be02f35bedb97115d072ae2ca24dc8011d5238567e807f9ec82b051acbee6523e826b768e1fd2822fd6944ff974b23b41a236558a0bb5e4cb84112830a54575989be95bc6b61f4d27db405c1dad1028a95dcbdee040da67ad3e3260039be7c7ecb5b160c40a86eb8a8194a4fbe8870c5424685ba9647f79e36412784ff', '6804e5e073327eb22fc45f872425da826099cc157e19e3b91dabbb64b5415fd78d8dc30e937a20f3643f41a0636c3984c5c2443ab9903ba5eff5363294b9b95aeb5945aebb89792e9efc5e03c3c6fcec580463c01657b56722448fd33b7f46e1ed13ac8414b526ceb4f11de960abee0a9b5957b0440bd5796d3d6dbaa1177005bedaee48da059470c85b812b93556d9c58fc377e4d0d6321319f2a59be44e1d184b3bb7a41cf1d1cb207bdf8dbf9ddc1de604adb81bf342d7f04365d86acc45964fa1dff0470d712558b400ccf593b1308ba2208a29fd127b31449c52c38e1c8ced8c2fba5cb56d42cb9aab09a3f63294a9fcb5b1764c93bd2cf2835445b4f58', '1c8ab884d64ff704e664e9c8b3cb773d51bdb510c5c2c64ed3fb6cc0a7678ba1bee43071015373a62330f623fd2c89447a1038fc28d32bf8ae947c2e88f93af8e849ad0ca9f13d6407f00f4dfed09b0b40874f8543a3a041379c5382cc4ae2361a357eccbda09a8b5c0d02d9a5f41526e79ff7bc5747bfef27ddee1beebcf60c54ec20f0ae642c02c59df5ebc1e637ccc864d1255293740acc486df53b72f06485350b4ce22c8c25ecd1ce6cee8291c6502039c063039605fddf36fdded1fbb24abaf4fac0adc720180f18184117ac8abc2dc4758c82539a2199e36b60a1afb24b4ac92a31a0e85090dd81038197f0bc1e0643fcb98e602b514d898ad1cb5ebc', '633f0727455854f4c1d4591b729e787d055974111955a2b5b10aca9471003fed5e1f3277a62aa19f43a40e09d89603d5a4c4b2f1114567db8a52e4a282f986b6fa33d16463eab03999acaf6d72b10141d022fbeca1351be5f34d1efb858ce1c8055918ace7bb6778092d2d4095abdfe1eac2f468db2a82a918accf36a00a125ce7aa0091563ebfddf44f357b0d70e0d1b65731f51ede7c20ebad3cfc0b212305671de1a737f61ec27812f8fd99a66a24a53e307b29cf09078c17396f356f39fa2ccc4aedf80553f7091819819db6dc91f120b090088d3ca89eadc3f38a36ffeac6c956c58c89337544e6beb0a63cffe60db2600ccf5844e69100de75ebc052c', '67431b13587c9e8131e8f2e2206f73688a0d9b6dca24016ea99a1755ec6211801ee2edb22173f07bd2ce6f88bc6f656f8030f69edef578d334c0db389f129c081e41cab2149b58d1bfc33239bb9828c15759c614f498cda91c93aabf9d2bcd80571866dc71fb2bd57b8d8c1837c71e0ce8b4fc6e3b637d9a6601f63e5a28ebc0fbc5cede5362def34c6657e17a632ac6e96cca713bc7a21d8ed8a9be0e71e49925ed5bdece063d2aedfdadc675221142fa5a5c0fb655bc0f1cfa7a0e2b7fae9855bcd87cf39cc5ab6e601a73834b44dfde49a02211c7b8e45aa27017e4d03358577f71008c6ebd09aa53f3e1d9dde94f637bdb90ff349c9426ebe44dd6aea8d8', '528685c002690a1c6371b5a06a4aeb68dad4828b72ae9783e240836ac8b4f6351bcc2f5dd7e761df026fc49d0b20efc1f2055bf3786fe6e68f1eb89bf00e0f309d9daf5cdc67bad425d93742cfa3a6a5bd1d5600e66d1996f518fe3ee4472bbb75f6c4a4f35759c3746d0806bd0c08a25b5a735ff1194092f76231e7b7ba8b859c9d3b60437aee4a52ae55044264d716b0f0ccc9395a19d788334b5509bea7fff6a2d0df0256e8378bf60da04b2b025134589e73756afcb73510fc3401c2005d31c90e49c983a8ae9e1c998077463650a01a58104e997280aba77afb73b9e5710c259356559fa9c2f6a11d289d48fd04e7718a2fe1bfc0619827984df4030593', '32a89b82f4e8a5fd9c3c8ab42b6634233d12381d8b2255bf14cbb528ea6c012bd66383198c981e902fda2e3620f411d98bfdbbfe1a3da98b21068f45a5d10815bf27b11d78ddbfe58604f0004e94e2c86bf35450fa6e7b535d32cccb76012b23b7152919fecc4ddc3b0dd5738569e7015ac0ac458b1c12fac3ac290cd264237e29191213543228665fe5613488551113bd884891738d97169969b1b84e210ebc7c393b45385e745905bc37bcd242921fdc0fb210f6e9aca7c6ce4f8dd17f0b336d2cd996de764d60e6f4a51a649565a8f2e07f1d99de108988dc0876a57a7e6bb02221188362bb015fea7730c084d4859ddd6c65a2b6b0d4b87274df92b9455a', '2eb40ac9d87e476c1561f98d6867e07d92cd316e4670f4deeaf57c73a74aeefffcd4e57ed88dcb71b99ac07e1bd9c271962398d7380b11ecdddb2d2d210ba557fd22ed7fd94339144f25a36fc922c83b42c25f6adf73c25ea43b7044b79f897ba41fcf183f07d86b0b47835b498c51f3207d8d6234ddb6dab06b1235a37d5da5fd9183946aba6ead81f85d39159d62a933775accaaa877096ab12ef8e1cac0b09743d2cabf872915ff1c6a05af92529fc1f9002c3c4e16347148956fab6d6ee379b1717f854348bed9a718327dbca17d5be7b5f182821ea1b5a628300b7d972dee4a37e1963a2bfafd2f58d8ed27e0cf3f75a0ba2ae1f2b7741b5fa794ae98d', '389d93294e4e395c4649304d13aaba2a0866c09a5d5ea5a15028ca49f1a6823db3ba38fe072bbd644ceaa73f7c3cfa5e4e9e2ac3f675e7486484c553f1cdf1a7a897296ec566bbf961fba598d65c48cda2d60a18ea3beaf20c8bfe491495d66dde2ceae579c4f6c084f9129d791c5b1aedd10584b4f4781e03926c9cfb729afe91b810c6754cd386372d66747f8890c044fea1297216626aa2fb37da15a91be9a476df2762cc093efae684eb027627a86a905efda7af53ab7e70823c724393ae02d69c3019a6b5ca5958e3f313c7f28f8e94caa0a7c7551502b622b110108ad3fb2a1ed7f8df3088ca99f69c8f09b6850e443538a31f4757811d31e066f89b51', '25e45344f0fbe1f95d16dffa11315c46ad6ffb13c49d46bc812a62a8bdb904586864fa325cb667aad88e173d36e9b53cb4c1295d36f720da60e4786226ef34bff1da9406a409b2b465fe84dd7ffd6da5336f36a7e652d60c71fe1d0bdedd40c9f140bdaa872b0e36e7ff26bb5ac7770ca8b0814c51573c9c853750a043700b9e2447f145590f1fa05a104c52d4a59e0b887664260774a10e2cc5d15e0b54ac2203e40b1698d34379c997ed2856def13588d00758bfe1b721f0e5795cb28f05df1cb3946703a02d684e4ac779dc2d29127b2246addefb191214dd4b5db68701f7ffd5de8b9fffdeaa9492c1f552b41dba5b7e3cff5f45c0c6000d18f340835ddc', '49df0e19b7e0ff3886a0ed6202535746795e0987030116722e3e3fa015e804d6fda925eb332804cdfefc4bdd78bffca8c8f9438fa692f42621eb91f8fc9aeeaaf1b8985e8fa954e0b247524708f1021e0ecfae07cc985eab5937ba8970a1b47cef5fe8bafa6c98c08bb76670ed8b826c1a969bc6b286a9877c4deec4443c0175cdcc61f191baa6bb8c62ca814fd9c6721612505d5763a98b169482a7b5c57e46fe81014ee563403c030bbaafe047527f534de706355b9080c500159292f837739bd8516750f09ee927039624183a4e8f4e9839378ca6fbeaf41579f2ce640b4478a7a3997adb9d46421f91f67249f3e51cde532198770532df2925236627fb81', '18f103759c2b29c985b0adb99521991cf077168272b93d1ae07c9b7b0758e528e6416410e4a6077468f554ab93a8027d7c590775809e5e0cdd2444fc061a98e00ac176ff426378df962dcf641b668882d5a7054f173564c14243fd7783ff9b2776508582170c23addf205a0cbfc4bd9c390cce0408dac5325c25e46473593706fd8f2941b155e28e2eece5ad6a5b26bb532fda900884eb65580bb93a7750deefc22e2c9474bc125ef3928b3e33ba96e7811f451b9c063d3022cb77c4a8a1ce64232ae558ca42008064e707de1160f5f8ba0908f5d9b9fda9deb7f2059d2874481a890491501fbdb5ea9b327a5afd2eeddfc11d1335877f7c579999437c6dd451', 'cfcf8191d7e30f68f59dd3466503ef6409b2e4a834ed42b7866037439b0e4c2c36e118001afff4387d181a898e3331e9d6f648cf6968755bec7d7a3917f7f3cba4c10d8226f8afc45ef354204597770f9d1303c8913f65835c0186d8bcea71b6e2c577ceca418b95a9b6657efb83797a4247c05e4502c0112b52f1e0d2fa4ad3e257032143767067fecf6858792eecb6154816cbf2a408f94b5bd07decc6d418a0e040a990db4e38435f468a3f409eef3bffcf0ad7a1ac85c06f048c410e3cbb87852cd80257cff2fee9d1a7fc87ab1db7ee4ffaaa4184111b1a19206739d708ed9a1eea32312e2869822430236b18fed58960c7dc51e942e0e62eed94043e8', '65985302175dd6c4d8c44b18d267b1ca05605ef7508cfda328d33de66f6ab7c761c542c36af51ba02c05c0b871f3f8fc477e2d96eaee15fc8d7e9b992dea1ac3a669b1e1a309aaa6875e69acec248fc128e03461227a296b2c87406aa27fc7e84dfce0c267d6320531bda73ee4294444abb37aa3bf6afd740702d85667bc81dc028997ae0ddb176760f7756fa842c3bec6e339f62b040dda55bad06a49a873ca224ef7119a68b0697377ea61543b6ce5aa60874ac26bd8f61dc26a3d04a973f18f41de36760ccc1d762020cd3648e5c9e025a08f3b4c80d7809dd3c3b9b46d9194e711a764429b0b64779f7fa982533d01cf157ff91b1244d6bd0d4de0b4d9eb', '4523801edefbb7b4e42ad223cfdc9e4cfd89d7c41dc3b0687ac75412e845480328bb3e1ac517a3079ff9f554339c6a90579231766a3f77cfed8f74f0b5e37a3fdd997a2ad7ec872959a048405128e08e4ea218d809707fded4d1d23ee59471492db896bbbf74c03599e5ffeb2cbd430a58c30ef144d2b0200304639116f6ae1b91c432e2c3c13414c8932631da8c903d32e5345288bcb3facc7b6cb3026fcd1652bb1409e4edac9e86154b0e02bd6daedcd899869d70b801bdb932ae848cdded8cde5242fb92b0b3d5b8532a76239c61c7d01ffd529a30de1c13219561c624b268130e8f6cace99235129890be6d739d9fa0d45e936cf520cc9ee284e074044f', '6690bf15e3a323c7ac7082ef11c5a792b5d1cdb2a6e18ba0e6338b64a755ac99a5f57b18d3b73a52dd0891980372ab0ee260ee0c0fe149128a0e8eee59dde19d3d30e82361f8561ca4edfcc88331632965dcc4fe59b38b0c9bed1304140c338098094e7e2be9fce42cc8539c4f2fd3de761e093a76131f306b6ee5fe1c2ae5df01c0bc7f502dc293d5396d6bf16867f0bbb8be28df41af812a25210d6818c4148571d46241c61ab87c73fd5a0a846e30ae9ddd20dd1b005026445ae7bf3023f252e7fb56b471a9b957fae822e9fab706b49cace74e7a2b0806a1914f879436226ca54b7fffb84ff4b8222bf66680c23de36efaa71ba3cdb54ad4420257ad5e68', '429aaf73a958cc31648f4af026294bbc98dc101599a9716023b6a89d92b1b0a3df2cf7f7d18c3777ac8e9cce0b4609d397c9befee9088cd309085c9327b3d36e6e09dfc5e2da0236f5e82a37505f0b9163e7ca1a0dc5e23574ce2b6cd2f7caab07337b76360316c9f7460f22eda91eb623995736e648350e81a9e396fa1b87ec92a386fb706596c16a66afac001b519707c5576aee5af26242b2bb891cc127b4147f44e77b63c3da05a3b3b590ec9de949a70e18df04d788dcff9b62d789ad4541e415e4e12c2b342c5b163fec01466973402b18c627dc2e9a95a858b0c6159c917c9b766af14af51db864448a885f82568f5c72ef06bc2c19b6748866de2ea7', '58d2bb8c9fcb7cb062c190f8d26c9bbece24e6bf38ecb4d1dd49d5875d03d651ad3b19fac07d8c3ded7cb9450fe174f50be0c6837e2bcc2098c73e3d7af60c18f1b5824d0be604c93268f9d0d90fc20c3a856480a5a7c356ed048b892a452d4c2cf57ae6ed72105c246a2fc89aab92facb74285bfbbc503eff760765cd722e230b0ea8e55aa4d5da954726b1719cef1e04b0568e90febc53e7eed994da5bf533216c12c28a29350b7e95ca661ccb3d510e3835961d60ab74161d538c7dee3e3b8b197e7c4fa96f57da5d54bbd1d67659a0f7f435c9a751c86a4bf04dcb5c70cc3a4bdbb0b64e43446fed8b10cb4f0805e6b30c79f7d47908b71f9cb2c4e4ddb4', '4f024c2b0c4837a21dcd65654b76b5796775c831a6ade1d5c632ebba68f7c7722b3fdf6dafd7a919da63ba8991404fac40eb8f624037d5796facaa8ffa9f2e7efd38d4869a3237d71afc06b5fedb859176617f12890b949678bdd667ee7e20b8ec2ea63685a972e2a067779e9056bf9d3ef33e6887b7df5eb1677fd816110ee187f9f0996be411a74465ffbe16aadb24c8d3cdc4553674fec1aa492825460caa8596203244347f8c052e32c89bedb52228486f2de54a2ce3d30186668bd22ec1d196db5b2867747cc37cbd1d4d5b3f8396b00cff50d01d41892e06f6dc8ad4571c16f019289292a7d43f03d3096bc27ce8601adc03d2f3ec75cbcdc4923a3f11', '1a62786a24530ce314e27c1c3e355688c2bc0328b8429c9cd6cbfe712c822bcd6dd21da179f5a4368e37380143eaa0373ca45662a8e326c711552d70a18bef95af43360eab8f6103b56125d6cc1aff9d93c1a6cc4b4640bae33a3dd3117a63eb718241805338355a9022fc7e8ff5bf7741d8da467b5b45a4848e315768e207fc0bdbdfe24958102127b085dec7d48159a8428ed3453796812b826dac9874fb2d5e644b84ace51db28171539b88f6fbc57b39b45cbaf6c01cbedfeb9ca8b9f48859e953abd7baed4d7e36c02922ca3faf75c97d53ee9024f2b2aa9200bd3fde307745c82d8e3c4f5269319b0696689484216dbb9e16812c8cfc46db7ff2613bf4', '4a1a5cfbfb8c81f9242c56da873b467e7bdafbdb92549f86d2116e2aec9a0ca71b3d3d6c22457ab0af096feacafc195992a15c59f514502249d2bff59202d3f3661c24113cc7e35778cc9d0e0a36a92b8858cb0a04c6828481caea39ae30d337806b4a74c9d29429b026f0a89cb893377d623b300cd1efe2eff65bcecd4f412de0cbd3e66f3e657d761d6161220ebabe99670c9dd86008df62d79cfeea9ef7111963818f157416c96def19a40abceae9c9bdd3ab0f9e9a633bd96fb2d9bc9253afddba0b992d635267a0b821558959b04231940e60da823baafd90d5a59e574e12ba1837439f190a547a3665a7c0857b8a6f2edd2403005a34ca3dd2ba6bff87', '4501d527a68e4afea577d3eedc6e6fa3711d77b0e1115e0ef618e9f94cb29158e6eeed31f5c7c3dc5535851667f2236ff1c6189fe731bad891100137f326b9718cafcfc51a50d67ecbd281319936f7da62f1386a02882bc89aa76e6b48e2a99af7fb12a92c691826d28ed7aaaa3a409640a8c59b6de22f178a02673c2c4daf6b13c84f814fa759a8baf8b0f0319a12b656b67de2b3cafe73be38c18ca00ef30384e7d8cd54edbc67cda6a7b8b5d1fab22b35ce81d78b006f886f8397f5ec6937a8012392fd3fc33a0ddc4112528dd1e221c9bd97796455faf4f908da04123fe6bed77686250864ab310ee4abef5bb5686885febf44fb758741316e4475f2ece1', '5c1b0ddadee0aef7bf9a970aea971a149b5074c8d3c8e1491e711a17fa2544693734513081ea7bdf25ddde0eb8a60398b37b4a6480d0eb4a373e53d21c667f5219757d48f2b188660ec34489a8f44057f9b78e223e0368645b5623cfafd5d34d57ceece776a6e1069da78d1008c3d9b4beb971d06283251a235f6b0545a902ea79a89e250f56070fe88dee395d7048fe0701bce6fb30c69534223c179c7d92688b0262f14b840f60cfbe25c38475bf4c01f5eedb452436de1b6fc9080267cf4bd60dc2b388d330b51f30804e7b43915218c4d04fea6e74ab102f57bd8d25b0b326a9f626461d587f9d0944690e7fa56dffbd76425a372f3faf5449e53544bb92', '17c380f3b81b5277eab11e9e5a0265054a8102f6ab9ab6b40b9a1a701afefc976cd1593e3e44176dd492c45b5c87f227a4079ea9c110fa0972dc229fd1681785e0c5835020078d4d61865bc8c90486d5bd13a0aee7683098fd45d6ef1e3ead9139c0493c6e094bc6967afe2eed75cf00e4909256a9211730fbdde3b5d675f824e20c9b8b5811577c7f46f5fda01b8bd6727a5cbca0a7cef639fc01490c67611dba33c02062083aa2d0e49f6a07f0ef5c855fea42b53fc9f372a68bf62a4a9d461bcfc4cc93c08bb925b326a226a5c520676e522772e7a62ec590b7ab2681e5a54608865c6b992e84b719c437d3b23cab35d5b9761580035672258e0c3a95018c', ...}, 1200)

Python

python
from collections import Counter token_counts = Counter(len(line.split()) for line in lines if line.strip()) token_counts Counter({2: 1200})

Python

python
weird = [line for line in lines if line.split()[0] not in {'0','1'}][:10] weird[:5], len(weird) (['499f9ecade02f71941e68da5346ffe3930a64cbeff7d7636497c16f31696fbd95fbd0f14a7231890b7dfe239c3496f51048b4c8b6a647f750083c921ea37170d186bc6a6fdab7308a93a69420403da5b34726e8a72393492a3d6a0e53a40b2f9cc94eef020b49d3ff70d5ce7fee1eed9a59f287861805770648cc82f0779b652ec900f106a07aad95d6a8a29279ac34b2173e51c3b94659516337d78979884959d3bac747f4f391daedbe304327fe847f2a3d316b62236369b74d01174fb98a570a21eccda86aa34a4dc3b9f39371e70b4e244ac11553d749ae4b3f321af7a0f61e04770972c03b13bfb42ada5d24068bda0ed7707797397dd1c4f6f693ae562 3bfdc969f15872587c7f8f8ed48f72beb4d5e7ed1be48fcf5027f2720a553ae92465e7acece48642c2c8543a743b7bc38a01717de9854ed4e1203cba8659a2352a5ea81ceebaed41591e6acdd585a3ebe5c20ddc613fe7529dbe45f60185b423a0fe217a73f4bd7b9fb8e7edcf60c370533c5e58e829a95a0e7e223762584c44f0d5e3ee9da02e75b21ca3dd3bef5a3d4a640d23651b4379473118bb37946e311acd0c357392c51f9c4aa211c37a40ecb1c0584d713ac0e421380f68385eb5d3a354fe0d830a09728145da1cd5416dc57a7a775c003d1a8ce967fdb1b4fdc62af2d321c9cbf3d326126a44c837be144c74aea01e296dd210260f50bd7e58a8af', '7216610089f7294659945d648d8bacedc71d630f2e88576c1cf48e803ec61f184aefbfd3a1fedcbd5da2c92610148ef5d2bb04091c50c0d54b21b5863b0a548a16731c015bda644a61bd285788e3a59579474965889a3f0422d6198b0d40508de045ae9c495924c0454301a096aa6cdc5fd1f0eb9358b54b5b434bbef0bc7a6056381abeb0fc284ee4c0b62f6d8c409a96a94378ccb3d669a38c418f5fe8ca314a59a2a9f963cf5aa68b0469dcf207f18656a944117d23809532d57411c53b6ffcd19aa7522449bc97793fede7a8c6d700c7258419d1850edd17794e88bcc16b8bb88ce11ae09b70fbd5b589ef1a35b0ab9e801b9f42a1cc955ed4cb09a6a8cb 131681a526f16ec7dbfbbbacda3c81e316492129f7e4463b3babf0ce68f41391c0074d2e64eb8f2b921827813cfdec2acd199e39a3e926d798ebcea676ead283a64604bdc643bd102c7b4b46a509c25b4be8caaaa9bf3d5213c94d3ac7dbb482c47aa857c9577d523d9c7587379236316f497a5293291e6f8045270de48c75620e7d07d2b6371a810becf634f025107a62ba00283bb8dae5850b0aae82616e1dd28dca9ed2d8398e21c09d16a8b395dcc35f089ff870b79d4532f4d3024c0df7d52dd0ac472b4812a1a113ce6b01261afb57b20efc029228dee0103ff505d84c4772505ccc96923e04f1c78fb78288cdf6b72d01f524a8c01f165695ef72f51e', '299642577e49804bbbbc9d9b76bf8c1b9617e0a4555efd16a7812463f03ac54e00bb320b769b2c4befc65000af1a0633b38d9bdc2d027813b24e6884ed49ff0bc42cf23f55dade61232b96a37f5eedc6c3504b893f98766beade4421d1a19dad248fbce3e9b491453c3abfdf13db81bf04ac0e21467ce016d681bde5f0cd935a95f0ad67598a4a70801649c7f9a0da9358809a60fb14debfe6785c40a4d9ef11e47bc52b300fbc1bd5d953ecdf26107e01197556a880b038b9d05189e953f1e62039309a90717deaa10098693a53d9b8bb388c5e02786cd0d1d81befee07cdfdab21994a2d30371a5195d6bfe382039b658cc95709355493eba9395582a654f7 472b9fca6bd74f4ad3fe80dcd5942f47ba7fed6887086b993dcbdb0a22d2cccdce951b25a43a0873cadd2646b0ca7fd3f6ad8132bd42aac5d69f268720e84751733c565809c646eff18f7ebfdf03d19ee7d8e6d463403abe37ebe5ef9dabcedf90edacaae332ca6accecd31d13a783fdf937ed5639ad374bee167a02e754bbad3df6e7332f1d4e28045670b46596c87ae88bdf941cadb40229ac973240f86e24c798e6977782e7ac8881104f5a86056440a6664b6ac4cbf2bf201f522511f984e839a34e7f98e70d970d6699415263bdf1637747ffa1da0c446e080783ef6fad624a3347234ab95586de140a225e17f1bfd9f556edb302654aafc6f67eefb2d5', '46cd4fc8ec434164a6a9d1f19377076cad967e64efdd35bf0bd8f99cb108a62657f08826ae52cf39bc9185d7885aa2e320f5e721476ef64b2fda16f41a7cc414fb18fc4cb42b21396296707baf286c49337f4c3456784c54721f25a7d91bb7b612555485a09c9416e2dd3f911fb351d3849421b61cc978ac677acdffdf5f6593676436cf8c1444951a080bad0bf8aa3bef088f0648352d6734df4f6bada402921a7829b5ee9ef9a001133e9a8bd24ed3f2b4474b15d8976ec8d6dff02146ae06a0dfa9b75ac4caefacb6a12ad483d84f45b553f7fdc1e3c1d3a4482a46aaafc30f23c7900a2e8f7411ef83f50b4c69147719e9d2709b9a28f31a3ab1bb4cf396 152ac32277a2331a05b05274efd554160221a2130c3d9a66145a469b45cd13e847cae58cfe824e30c7b90ef69fa4ab1bb7014a5388a433ab6094f94d3ef916f6a9c8d458bd1f48f176c2dc877042f9bbf6cd8404064ce860dd271886d7e5d559ab8c50aca6ccbe597df44bd919f052efbfaa8c296c856adf51c3a57a1e9dea90a7e51b7dc60de05e8f81ead66b9b15dc4893651a564a32c7a96b7d4192fb44f69ab1bc33457897313d864388086023f3f62e8f8d63ca68ebaffe6f35111f1ecad52d72e1c1af68be2aac88066fc371d2439ca37b7d586c00849a40eae4d69c91af4ed9cca03a19ac7e50b7cdd732214db0bb1171edac59f9e0304d9d530ea43d', '723ad6d44f118b800394cc250eacac2916d096a16c6e53715050cc2ef343caffd9bc0bb40250aa461eac41949537ae9b9d7c87555ea8d4c07f31e33e11eb9ee4d4a79cdf2303bbc44d2789c696b288120e9dcff08b36f39570dd357bb90ef1129abfff7dd123b7ea13bc0a4cac85ce0980f758efc9ad1defe9178125b0de333281bc0e49a288e5a0855d34865aca26cf20554f2aec3b7dfc02c16477d725ad0862ac722ff2a382cc3abc5ee7317fe4cabb60f75fe3b96af49a67436fa6fad33d3402a5aacd1d558aa16189090a79589f5152d1ec63c09a2c5b2b2e2eeebc2efc98d666a3f00bb5d779add82be38fae6dbe2a3393e217b29a07a63999a259e1f 669c49eeafd38ce130253dfbd7eb49cc213e3b59bdf457acbab0852c43f57a7c52c41976f0844e71ca430eb29c57eabf9ec3087c31d821083ee7ce65e480a0d6d4673d2ff12f04a7ebbff2c04a256d6f043eb7c514d82a62122a4753b92dba210469b71906546cabfa5a190dc0919d85e2886e6ad7d0ff3e171a58237e1e549407c82712451825962f6ce732f8a3871a8a0f721d9838f15c7ef6abf13f7717965be3b83a85d36e466993db34355d3306c6fef4554bc5af971eb8b9f7bcdf2442808aff17bab924a8dd178c9d9b8eda10d74ff208bc830b52bcc42bb849fc12aca549616d71a697d1976bb1c788021e3ff20373db87511693820c5b7636d2758d'], 10)

Python

python
w0 = [line for line in lines if line.split()[0] not in {'0','1'}][0] t1,t2 = w0.split() len(t1), len(t2), t1[:20], t2[:20] (512, 512, '499f9ecade02f71941e6', '3bfdc969f15872587c7f')

Python

python
idx_first_not1 = next(i for i,l in enumerate(lines) if l.split()[0] != '1') idx_first_not1, lines[idx_first_not1-3:idx_first_not1+3] (80, ['1 27', '1 27', '1 28', '499f9ecade02f71941e68da5346ffe3930a64cbeff7d7636497c16f31696fbd95fbd0f14a7231890b7dfe239c3496f51048b4c8b6a647f750083c921ea37170d186bc6a6fdab7308a93a69420403da5b34726e8a72393492a3d6a0e53a40b2f9cc94eef020b49d3ff70d5ce7fee1eed9a59f287861805770648cc82f0779b652ec900f106a07aad95d6a8a29279ac34b2173e51c3b94659516337d78979884959d3bac747f4f391daedbe304327fe847f2a3d316b62236369b74d01174fb98a570a21eccda86aa34a4dc3b9f39371e70b4e244ac11553d749ae4b3f321af7a0f61e04770972c03b13bfb42ada5d24068bda0ed7707797397dd1c4f6f693ae562 3bfdc969f15872587c7f8f8ed48f72beb4d5e7ed1be48fcf5027f2720a553ae92465e7acece48642c2c8543a743b7bc38a01717de9854ed4e1203cba8659a2352a5ea81ceebaed41591e6acdd585a3ebe5c20ddc613fe7529dbe45f60185b423a0fe217a73f4bd7b9fb8e7edcf60c370533c5e58e829a95a0e7e223762584c44f0d5e3ee9da02e75b21ca3dd3bef5a3d4a640d23651b4379473118bb37946e311acd0c357392c51f9c4aa211c37a40ecb1c0584d713ac0e421380f68385eb5d3a354fe0d830a09728145da1cd5416dc57a7a775c003d1a8ce967fdb1b4fdc62af2d321c9cbf3d326126a44c837be144c74aea01e296dd210260f50bd7e58a8af', '7216610089f7294659945d648d8bacedc71d630f2e88576c1cf48e803ec61f184aefbfd3a1fedcbd5da2c92610148ef5d2bb04091c50c0d54b21b5863b0a548a16731c015bda644a61bd285788e3a59579474965889a3f0422d6198b0d40508de045ae9c495924c0454301a096aa6cdc5fd1f0eb9358b54b5b434bbef0bc7a6056381abeb0fc284ee4c0b62f6d8c409a96a94378ccb3d669a38c418f5fe8ca314a59a2a9f963cf5aa68b0469dcf207f18656a944117d23809532d57411c53b6ffcd19aa7522449bc97793fede7a8c6d700c7258419d1850edd17794e88bcc16b8bb88ce11ae09b70fbd5b589ef1a35b0ab9e801b9f42a1cc955ed4cb09a6a8cb 131681a526f16ec7dbfbbbacda3c81e316492129f7e4463b3babf0ce68f41391c0074d2e64eb8f2b921827813cfdec2acd199e39a3e926d798ebcea676ead283a64604bdc643bd102c7b4b46a509c25b4be8caaaa9bf3d5213c94d3ac7dbb482c47aa857c9577d523d9c7587379236316f497a5293291e6f8045270de48c75620e7d07d2b6371a810becf634f025107a62ba00283bb8dae5850b0aae82616e1dd28dca9ed2d8398e21c09d16a8b395dcc35f089ff870b79d4532f4d3024c0df7d52dd0ac472b4812a1a113ce6b01261afb57b20efc029228dee0103ff505d84c4772505ccc96923e04f1c78fb78288cdf6b72d01f524a8c01f165695ef72f51e', '299642577e49804bbbbc9d9b76bf8c1b9617e0a4555efd16a7812463f03ac54e00bb320b769b2c4befc65000af1a0633b38d9bdc2d027813b24e6884ed49ff0bc42cf23f55dade61232b96a37f5eedc6c3504b893f98766beade4421d1a19dad248fbce3e9b491453c3abfdf13db81bf04ac0e21467ce016d681bde5f0cd935a95f0ad67598a4a70801649c7f9a0da9358809a60fb14debfe6785c40a4d9ef11e47bc52b300fbc1bd5d953ecdf26107e01197556a880b038b9d05189e953f1e62039309a90717deaa10098693a53d9b8bb388c5e02786cd0d1d81befee07cdfdab21994a2d30371a5195d6bfe382039b658cc95709355493eba9395582a654f7 472b9fca6bd74f4ad3fe80dcd5942f47ba7fed6887086b993dcbdb0a22d2cccdce951b25a43a0873cadd2646b0ca7fd3f6ad8132bd42aac5d69f268720e84751733c565809c646eff18f7ebfdf03d19ee7d8e6d463403abe37ebe5ef9dabcedf90edacaae332ca6accecd31d13a783fdf937ed5639ad374bee167a02e754bbad3df6e7332f1d4e28045670b46596c87ae88bdf941cadb40229ac973240f86e24c798e6977782e7ac8881104f5a86056440a6664b6ac4cbf2bf201f522511f984e839a34e7f98e70d970d6699415263bdf1637747ffa1da0c446e080783ef6fad624a3347234ab95586de140a225e17f1bfd9f556edb302654aafc6f67eefb2d5'])

Python

python
for i in range(70, 90): l=lines[i] a,b=l.split() print(i, len(a), len(b), a[:8], b[:8])

Python

python
resp_candidates = [line for line in lines if line.split()[1] in {'0','1'}] len(resp_candidates), resp_candidates[:10] (0, [])

Python

python
zero_lines=[line for line in lines if line.split()[0]=='0'] len(zero_lines), zero_lines[:5] (0, [])

Python

python
from collections import defaultdict lens=Counter(len(line.split()[0]) for line in lines) lens Counter({512: 980, 511: 131, 1: 80, 510: 9})

Python

python
import math, random N=int(pub[0],16) e=int(pub[1]) # find a few lines where both tokens length about 512 and test relation pairs=[] for line in lines[80:90]: a,b=line.split() pairs.append((int(a,16), int(b,16))) tests=[] for a,b in pairs: tests.append(pow(a,e,N)==b) tests [False, False, False, False, False, False, False, False, False, False]

Python

python
import sympy as sp ratios=[] for a,b in pairs: ratios.append((b*sp.mod_inverse(a,N))%N) len(set(ratios)), ratios[:3] (10, [4857567784555452763449492775226342516750080075050252781213791982638876706132568085949159368923259758635847334965665272277316317155864404508337192069214632727314478471039117414219782140091404771044640842361609990058457058464251564506559152745515542167034811825575642672473804806727872823160606717237836925639993945668759058838871856548194134995061501796538837307220529770496090477011980935095314804392475058196337408176484023688174879392002163796629020804671862861337887325398253349124345982429614786077093038461398576918898169255771053615047143411283712218482445125892421170190146558763868310821533914902396826942625, 8225131433230449924050957418509240954720574764894161845916292288677811506613721956773133621835033831785126119742713943321781499471072377561870848096043175725498122101021218744850252000285597624967593711131021741268174110212431667599618132240733152364010699866013351306899896458072814179312145420101381178093996832170979594401168667710375109895025308360446534690421337448396805431126541040163118857198952504192308437451396100503942993664115871571506066407623709495907777427283157266505118889485972698406712939117353182495711431928942247211578593866177030699240457147240303913680654623498829410724554754616934926455379, 8557848953866602681055083553983880792954617207136609830270527068650560754805683419332977876994721609322882950503564053219676500656870199090319914465368846939067846627824497779088322767416574827143376516085033961749605961293754382572096761515038688191284230211855492442012749290537196837650272992912381227873325061586176907433337700098120003521839405524351559834789775814383243947307936893052800089354466008638035211505764763639143234108951297585153956460241056967333743023927451347784599250475090253422610902155270943983202617666087671127342999665813750799744850433831858818865212488445426660614192746255748759235451])

Python

python
diffs=[(b-a)%N for a,b in pairs] len(set(diffs)), diffs[:3] (10, [13140135444385232223857021693402248549069545455566090862512576746124027065505597110397140297948074277274596526525901793294423504879108507445989721727221407543204647490620713013857130969142125718148593551891442473891710774375270026042347208447834756215579343142087280522498294396630855514603607528236830705472137381262773759008347957517594571464003307803226354929894038924385780379531928562585449721732327082623605801046468568814811338075663235640011220800541348633041993853309280099738174529387417801349623894777592613192883567342729041096116978216269587551897489870074824180377463435365652426775698438590146016613744, 2868460393760678974823790454432770558833672411308564506701087638643163156526102081925394769610475217521891020584958381854597103232962449934779867011018561404350214785359633890387940904694908972606033091668983735553830300246558207116521558582252908115719367835077975579616755193733579996156660108724334335868872653124589247831927722975073907313140227243970159320558778674608840657751773474104687862652929788718519506794721460735968868974570468563352676468846780097818209444581446996961239576809261936895283103972451652366525869117323055656765162610101275739005297936719538992202889949206098453904494829392831722102390, 3734565487876618255649281728780173131507650025481446567367779774998763891304668194416029254558392493359228138502892996817138058726668996995158616231667071026382605246865797647638671287352118161498116373902143604111890376557843160121032238976745889364028882081387164067012181377922493564404857302546925877666026497363689777314066702735648739575608161542958840020837596821050811546624710413768264314471236148469830848857277233805883657824395018545909602751533154568505418358308277765523872574128197741594770264841400190553785067609242808942464332604906620434356158194116916669370168639765656713501844721654257525808606])

Python

python
tests=[] for line in lines[80:90]: c_hex,m_hex = line.split() c=int(c_hex,16); m=int(m_hex,16) tests.append(pow(m,e,N)==c) tests [False, False, False, False, False, False, False, False, False, False]

Python

python
import math pairs=[] for line in lines: a,b=line.split() # interpret a and b as hex integers m=int(a,16) if all(ch in '0123456789abcdef' for ch in a.lower()) else int(a) c=int(b,16) pairs.append((m,c)) # compute gcd for first 200 pairs gcds=[] for m,c in pairs[:200]: diff=(pow(m,e,N)-c)%N g=math.gcd(diff,N) gcds.append(g) set([g for g in gcds if g!=1 and g!=N]) , gcds[:10] (set(), [1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

Python

python
g_non=[] for m,c in pairs[:500]: diff=pow(m,e)-c g=math.gcd(diff,N) if g!=1 and g!=N: g_non.append(g) len(g_non), g_non[:3]

Python

python
import numpy as np, math # sample 20 pairs from big part big_pairs=[] for line in lines[80:120]: a,b=line.split() big_pairs.append((int(a,16), int(b,16))) diff_bits=[(a^b).bit_length() for a,b in big_pairs] # not diff but XOR # Compute approximate hamming? can't min(diff_bits), max(diff_bits), diff_bits[:5] (2038, 2047, [2047, 2047, 2047, 2047, 2047])

Python

python
abs_bits=[abs(a-b).bit_length() for a,b in big_pairs] min(abs_bits), max(abs_bits), abs_bits[:5] (2037, 2047, [2044, 2047, 2045, 2046, 2047])

Python

python
tests=[] for a,b in big_pairs[:20]: tests.append(pow(b,e,N)==a) sum(tests), tests[:10] (0, [False, False, False, False, False, False, False, False, False, False])

Python

python
for i in range(len(lines)-5, len(lines)): a,b=lines[i].split() print(i, len(a), len(b), a[:10], b[:10])

Python

python
last_line=lines[-1] c_hex, m_hex = last_line.split() m_bytes=bytes.fromhex(m_hex) m_bytes[:20], len(m_bytes), m_bytes (b'flag{7a94faqe-e0a3-1', 66, b'flag{7a94faqe-e0a3-1qf0-8527-30050575612d-983f85d9-e0a3-11f0-88cc\xbe')

Python

python
ciphertext_hex = Path('/mnt/data/ciphertext.txt').read_text().strip() # find lines where either token equals ciphertext_hex matches=[(i,l) for i,l in enumerate(lines) if ciphertext_hex in l.split()] len(matches), matches[:3], matches[-3:] (1, [(1199, '464c1b4adee3731c5372f912385ae67ba74055f282118e8cedbbaedc389d8902d355c9f9fc0abdc5442a15014c167e56b0ebbb5c0cfec997a067a09db4deed4f32f84aac2213e945adfa4a1d7e61a46824da58eb8db7e24ab32f83bd65271d81ee0a5f9dc45934c9e240b6f77da8f130dbb5163238cb60f7d610d1786f3f1f1d5adadccc69c59cf6e5f8a20d10f00d6d6d1b216bd72f9ea16ea3d8ecc0a0f6cf6b8665dfb4d97faca774d4f0d6a2454bafa9c04dc843f86f5a54c3a9b9e49180e1e68c17622707436f494a7744e175d69a798f1cb3be7bb4115de543b4ac3b1ada91a954fafaef681a84cc39b6f8449749dc351a2b1e32c20be29ae1699b4fe8 666c61677b37613934666171652d653061332d317166302d383532372d3330303530353735363132642d39383366383564392d653061332d313166302d38386363be')], [(1199, '464c1b4adee3731c5372f912385ae67ba74055f282118e8cedbbaedc389d8902d355c9f9fc0abdc5442a15014c167e56b0ebbb5c0cfec997a067a09db4deed4f32f84aac2213e945adfa4a1d7e61a46824da58eb8db7e24ab32f83bd65271d81ee0a5f9dc45934c9e240b6f77da8f130dbb5163238cb60f7d610d1786f3f1f1d5adadccc69c59cf6e5f8a20d10f00d6d6d1b216bd72f9ea16ea3d8ecc0a0f6cf6b8665dfb4d97faca774d4f0d6a2454bafa9c04dc843f86f5a54c3a9b9e49180e1e68c17622707436f494a7744e175d69a798f1cb3be7bb4115de543b4ac3b1ada91a954fafaef681a84cc39b6f8449749dc351a2b1e32c20be29ae1699b4fe8 666c61677b37613934666171652d653061332d317166302d383532372d3330303530353735363132642d39383366383564392d653061332d313166302d38386363be')])

Python

python
inside="7a94faqe-e0a3-1qf0-8527-30050575612d-983f85d9-e0a3-11f0-88cc" parts=inside.split('-') parts, list(map(len,parts)), sum(len(p) for p in parts)+len(parts)-1 (['7a94faqe', 'e0a3', '1qf0', '8527', '30050575612d', '983f85d9', 'e0a3', '11f0', '88cc'], [8, 4, 4, 4, 12, 8, 4, 4, 4], 60)

Python

python
pattern="666c61677b" hits=[] for i,l in enumerate(lines): if pattern in l: hits.append(i) hits[:10], len(hits) ([1199], 1)

Python

python
import math, time # Parse transcript pairs as (c, m_noisy) or (m_noisy, c)? Determine from last line: first is ciphertext, second is plaintext (smaller len 132), so yes. pairs_cm=[] for line in lines: c_hex, m_hex = line.split() c=int(c_hex,16) m=int(m_hex,16) pairs_cm.append((c,m)) start=time.time() factors=set() vals=[] for i,(c,m) in enumerate(pairs_cm): # compute pow(m,e,N) - c mod N diff=(pow(m,e,N)-c) % N g=math.gcd(diff,N) if 1<g<N: factors.add(g) vals.append((i,g)) end=time.time() len(factors), list(factors)[:3], vals[:5], end-start (0, [], [], 0.39893579483032227)

Python

python
factors=set() vals=[] for i,(m,s) in enumerate(pairs_cm): # but pairs_cm uses int(c,m). reuse variable names m_val=m # actually c stored s_val=s # m stored diff=(pow(s_val,e,N)-m_val) % N g=math.gcd(diff,N) if 1<g<N: factors.add(g) vals.append((i,g)) len(factors), vals[:5] (0, [])

Python

python
from collections import Counter, defaultdict c_counts=Counter(c for c,_ in pairs_cm) # how many ciphertexts repeated? repeated=[(c,count) for c,count in c_counts.items() if count>1] len(repeated), repeated[:10] (1, [(1, 80)])

Python

python
# collect outputs for ciphertext=1 outs=[m for c,m in pairs_cm if c==1] len(outs), outs[:5] (80, [2, 2, 3, 3, 4])

Python

python
import math g_list=[] for m in outs: g=math.gcd(m-1,N) if g!=1 and g!=N: g_list.append(g) len(g_list), g_list[:5] (0, [])

Python

python
bit_lengths=[m.bit_length() for m in outs] Counter(bit_lengths).most_common(10), min(bit_lengths), max(bit_lengths) ([(5, 30), (4, 16), (6, 13), (3, 9), (2, 4), (2047, 4), (2046, 2), (2044, 1), (2041, 1)], 2, 2047)

Python

python
import itertools, math outs_unique=list(set(outs)) # compute gcd of differences with N factors=set() for i in range(len(outs_unique)): for j in range(i+1, len(outs_unique)): d=abs(outs_unique[i]-outs_unique[j]) g=math.gcd(d,N) if 1<g<N: factors.add(g) break if factors: break factors set()

Python

python
def hamming(a,b): return bin(a^b).count("1") for ch in ['1','9','a','b','c','d','e','f','0','8']: print(ch, hamming(ord(ch), ord('q')))

Python

python
hamming(0x7d,0xbe) 4

Python

python
obs = m_bytes.decode('latin1') # keep bytes mapping 0-255 obs 'flag{7a94faqe-e0a3-1qf0-8527-30050575612d-983f85d9-e0a3-11f0-88cc¾'

Python

python
candidate = obs[:-1].replace('q','1') + '}' candidate, len(candidate) ('flag{7a94fa1e-e0a3-11f0-8527-30050575612d-983f85d9-e0a3-11f0-88cc}', 66)

Python

python
candidate2 = obs[:-1].replace('q','a') + '}' candidate2 'flag{7a94faae-e0a3-1af0-8527-30050575612d-983f85d9-e0a3-11f0-88cc}'

Python

python
def xor_repeat(data, key): out=bytes([b ^ key[i%len(key)] for i,b in enumerate(data)]) return out xored = xor_repeat(m_bytes, mask) xored[:20], xored.decode('utf-8', errors='replace') (b'\xf5.\xc1;<q+\x04\xfb!\xd5^\xf6o\xc5l&ug\x0c', "�.�;<q+\x04�!�^�o�l&ug\x0c�!�\x02�w�kjuz\r�w�\x18�t�n#ks\x05�!�\x1a�{�9w'y\x10�v�\x1f�z�?$�")

Python

python
# show last line exact print(last_line[:120]) print(last_line[-120:])

Python

python
c_hex, m_hex = last_line.split() m_hex[:20], m_hex[:40], len(m_hex) ('666c61677b3761393466', '666c61677b37613934666171652d653061332d31', 132)

Python

python
desc=Path('/mnt/data/题目描述.txt').read_text(encoding='utf-8', errors='ignore') desc[:500], len(desc) ('双参数噪声', 5)

思考

Crafting final response in Chinese

We have the complete public.txt snippet and ciphertext citation, plus most of the information we need. I’ll explain the noisy plaintext hex and how it decodes into a flag. I'll mention necessary assumptions about bit

Thought for 12m 45s

回答

ciphertext.txt 里拿到目标密文(这一整串十六进制)(ciphertext.txt),结合 public.txt 给的 RSA 公钥参数(e=10001,以及 N)(public.txt),再用 oracle_transcript.txt 这种“密文 →(带噪声的)解密结果”的输出格式(oracle_transcript.txt)去定位对应那一条记录并把解密十六进制转成 ASCII,可以得到一个几乎完整的 flag,只是有少量噪声字符(两个 q 和末尾 1 个非 ASCII 字节)。

按“最小改动/最可能是单比特翻转”的方式纠正后,flag 为:

flag{7a94fa1e-e0a3-11f0-8527-30050575612d-983f85d9-e0a3-11f0-88cc}

質問

写一个50字的操作内容

Python

python
s="读取ciphertext与public的N,e,匹配oracle记录取明文,转ASCII并修正噪声得到flag。" len(s) 56

Python

python
s="读取密文和公钥N,e,对照oracle输出定位明文,转ASCII并修噪恢复flag。" len(s) 42

Python

python
s="从文件取密文和公钥N,e,对照oracle输出定位明文,转ASCII并修噪恢复flag。" len(s) 44

Python

python
s="从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复flag。" len(s) 45

Python

python
s="从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复flag即可。" len(s) 47

Python

python
s="从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复完整flag即可。" len(s) 49

Python

python
s="从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复完整flag即可呀。" len(s) 50

思考

s="从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复完整flag即可呀。" len(s)

50

Thought for 1m 1s

回答

从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复完整flag即可呀。(oracle_transcript.txt)

このQ&Aを共有