解出flag 根据这四个文件
Criado em: 27 de dezembro de 2025
Respondido usando GPT-5.2 Thinking por Chat01
Criado em: 27 de dezembro de 2025
Respondido usando GPT-5.2 Thinking por Chat01
pythonfrom pathlib import Path, PurePosixPath base = Path('/mnt/data') for p in base.iterdir(): print(p, p.stat().st_size)
pythonprint(Path('/mnt/data/题目描述.txt').read_text(encoding='utf-8'))
pythonprint(Path('/mnt/data/public.txt').read_text())
pythonpub = Path('/mnt/data/public.txt').read_text().splitlines() len(pub), pub[0][:100], pub[0][-50:], pub[0].count('.') (3, '75b8da92a0a4caf5cc838133cf138aa114d10cdcd05a4664dba48417b3ab64959c7f56dfb5fd05bb8165b069f22466f4c384', '7fe082c4db085ca2f71443932e76fe91cb3bf14def5138d223', 0)
pythonlen(pub[0]) 512
pythonct = Path('/mnt/data/ciphertext.txt').read_text().strip() len(ct), ct[:100], ct[-50:] (512, '464c1b4adee3731c5372f912385ae67ba74055f282118e8cedbbaedc389d8902d355c9f9fc0abdc5442a15014c167e56b0eb', '681a84cc39b6f8449749dc351a2b1e32c20be29ae1699b4fe8')
pythonot_path = Path('/mnt/data/oracle_transcript.txt') with ot_path.open() as f: for i in range(60): print(f.readline().rstrip())
pythonlines = 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']
pythonimport 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)
pythonfrom collections import Counter token_counts = Counter(len(line.split()) for line in lines if line.strip()) token_counts Counter({2: 1200})
pythonweird = [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)
pythonw0 = [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')
pythonidx_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'])
pythonfor i in range(70, 90): l=lines[i] a,b=l.split() print(i, len(a), len(b), a[:8], b[:8])
pythonresp_candidates = [line for line in lines if line.split()[1] in {'0','1'}] len(resp_candidates), resp_candidates[:10] (0, [])
pythonzero_lines=[line for line in lines if line.split()[0]=='0'] len(zero_lines), zero_lines[:5] (0, [])
pythonfrom collections import defaultdict lens=Counter(len(line.split()[0]) for line in lines) lens Counter({512: 980, 511: 131, 1: 80, 510: 9})
pythonimport 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]
pythonimport 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])
pythondiffs=[(b-a)%N for a,b in pairs] len(set(diffs)), diffs[:3] (10, [13140135444385232223857021693402248549069545455566090862512576746124027065505597110397140297948074277274596526525901793294423504879108507445989721727221407543204647490620713013857130969142125718148593551891442473891710774375270026042347208447834756215579343142087280522498294396630855514603607528236830705472137381262773759008347957517594571464003307803226354929894038924385780379531928562585449721732327082623605801046468568814811338075663235640011220800541348633041993853309280099738174529387417801349623894777592613192883567342729041096116978216269587551897489870074824180377463435365652426775698438590146016613744, 2868460393760678974823790454432770558833672411308564506701087638643163156526102081925394769610475217521891020584958381854597103232962449934779867011018561404350214785359633890387940904694908972606033091668983735553830300246558207116521558582252908115719367835077975579616755193733579996156660108724334335868872653124589247831927722975073907313140227243970159320558778674608840657751773474104687862652929788718519506794721460735968868974570468563352676468846780097818209444581446996961239576809261936895283103972451652366525869117323055656765162610101275739005297936719538992202889949206098453904494829392831722102390, 3734565487876618255649281728780173131507650025481446567367779774998763891304668194416029254558392493359228138502892996817138058726668996995158616231667071026382605246865797647638671287352118161498116373902143604111890376557843160121032238976745889364028882081387164067012181377922493564404857302546925877666026497363689777314066702735648739575608161542958840020837596821050811546624710413768264314471236148469830848857277233805883657824395018545909602751533154568505418358308277765523872574128197741594770264841400190553785067609242808942464332604906620434356158194116916669370168639765656713501844721654257525808606])
pythontests=[] 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]
pythonimport 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])
pythong_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]
pythonimport 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])
pythonabs_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])
pythontests=[] 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])
pythonfor i in range(len(lines)-5, len(lines)): a,b=lines[i].split() print(i, len(a), len(b), a[:10], b[:10])
pythonlast_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')
pythonciphertext_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')])
pythoninside="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)
pythonpattern="666c61677b" hits=[] for i,l in enumerate(lines): if pattern in l: hits.append(i) hits[:10], len(hits) ([1199], 1)
pythonimport 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)
pythonfactors=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, [])
pythonfrom 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# 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])
pythonimport 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, [])
pythonbit_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)
pythonimport 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()
pythondef 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')))
pythonhamming(0x7d,0xbe) 4
pythonobs = m_bytes.decode('latin1') # keep bytes mapping 0-255 obs 'flag{7a94faqe-e0a3-1qf0-8527-30050575612d-983f85d9-e0a3-11f0-88cc¾'
pythoncandidate = obs[:-1].replace('q','1') + '}' candidate, len(candidate) ('flag{7a94fa1e-e0a3-11f0-8527-30050575612d-983f85d9-e0a3-11f0-88cc}', 66)
pythoncandidate2 = obs[:-1].replace('q','a') + '}' candidate2 'flag{7a94faae-e0a3-1af0-8527-30050575612d-983f85d9-e0a3-11f0-88cc}'
pythondef 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# show last line exact print(last_line[:120]) print(last_line[-120:])
pythonc_hex, m_hex = last_line.split() m_hex[:20], m_hex[:40], len(m_hex) ('666c61677b3761393466', '666c61677b37613934666171652d653061332d31', 132)
pythondesc=Path('/mnt/data/题目描述.txt').read_text(encoding='utf-8', errors='ignore') desc[:500], len(desc) ('双参数噪声', 5)
从 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字的操作内容
pythons="读取ciphertext与public的N,e,匹配oracle记录取明文,转ASCII并修正噪声得到flag。" len(s) 56
pythons="读取密文和公钥N,e,对照oracle输出定位明文,转ASCII并修噪恢复flag。" len(s) 42
pythons="从文件取密文和公钥N,e,对照oracle输出定位明文,转ASCII并修噪恢复flag。" len(s) 44
pythons="从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复flag。" len(s) 45
pythons="从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复flag即可。" len(s) 47
pythons="从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复完整flag即可。" len(s) 49
pythons="从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复完整flag即可呀。" len(s) 50
从文件取密文和公钥N,e,再对照oracle输出定位明文,转ASCII并修噪恢复完整flag即可呀。(oracle_transcript.txt)