{"id":640,"date":"2024-10-29T08:43:22","date_gmt":"2024-10-29T00:43:22","guid":{"rendered":"https:\/\/www.sxr666.cn\/?p=640"},"modified":"2024-11-09T09:23:45","modified_gmt":"2024-11-09T01:23:45","slug":"yymmx","status":"publish","type":"post","link":"https:\/\/www.sxr666.cn\/index.php\/2024\/10\/29\/yymmx\/","title":{"rendered":"\u5e94\u7528\u5bc6\u7801\u5b66\u2014\u2014\u5934\u6b4c\u5b9e\u9a8c"},"content":{"rendered":"\n<p class=\"has-accent-1-color has-text-color has-link-color has-larger-font-size wp-elements-25ee9f44f8f7aeeaeb5e5121d810e007\"><strong>\u7b2c\u4e8c\u6b21\u8bfe<\/strong><\/p>\n\n\n\n<p><strong><strong>1_\u8bfe\u524d\uff1a\u6d41\u5bc6\u7801BBF\u5b9e\u9a8c-Build<\/strong><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-3d909343abacdbde83662da45cf8f680\"><code>#\u7b2c1\u5173\uff1a\u5229\u7528LFSR\u751f\u6210\u968f\u673a\u6bd4\u7279\u5e8f\u5217\nclass LFSR:\n    def __init__(self, seed):\n        # \u786e\u4fdd\u79cd\u5b50\u662f\u4e00\u4e2abytes\n        seed = int.from_bytes(seed, byteorder='big')\n        self.state = seed\n        self.tap_positions = &#91;0, 10, 30, 31]  # \u793a\u4f8b\u53cd\u9988\u4f4d\u4f4d\u7f6e\n        self.length = 32  # \u56fa\u5b9a32\u4f4d\u957f\u5ea6\n\n    def next_bit(self):\n        # \u8ba1\u7b97\u53cd\u9988\u4f4d\n        feedback_bit = 0\n        for tap in self.tap_positions:\n            feedback_bit ^= (self.state >> (self.length - tap - 1)) &amp; 1\n\n        # \u66f4\u65b0\u72b6\u6001\n        self.state = ((self.state &lt;&lt; 1) | feedback_bit) &amp; 0xffffffff\n        return feedback_bit\n\n    def generate_bits_list(self, n):\n        return &#91;self.next_bit() for _ in range(n)]\n\n    def generate_bits_str(self, n):\n        bits = self.generate_bits_list(n)\n        return ''.join(str(bit) for bit in bits)\n\n    def generate_bytes(self, n):\n        bits = self.generate_bits_str(n * 8)\n        bits_int = int(bits, 2)\n        bits_bytes = bits_int.to_bytes(n, 'big')\n        return bits_bytes\n\nif __name__ == '__main__':\n    #\u8bfb\u53d6\u79cd\u5b50\uff0816\u8fdb\u5236\u7f16\u7801\uff09\n    seed = bytes.fromhex(input())\n    #\u4ee5\u79cd\u5b50\u4f5c\u4e3alfsr\u8bbe\u7f6e\u521d\u59cb\u72b6\u6001\n    lfsr = LFSR(seed)\n    # \u751f\u621016\u4e2a\u968f\u673a\u5b57\u8282\n    random_bytes = lfsr.generate_bytes(16)\n    # \u4ee516\u8fdb\u5236\u5f62\u5f0f\u6253\u5370\n    print(random_bytes.hex())<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-f855e7c2a6648601d4815feb721ca67e\"><code>#\u7b2c2\u5173\uff1a\u5229\u7528LFSR\u5b9e\u73b0\u6d41\u5bc6\u7801\u52a0\u5bc6\ndef xor(bs1, bs2):\n    return bytes(a ^ b for a, b in zip(bs1, bs2))\n\nclass LFSR:\n    def __init__(self, seed):\n        # \u786e\u4fdd\u79cd\u5b50\u662f\u4e00\u4e2abytes\n        seed = int.from_bytes(seed, byteorder='big')\n        self.state = seed\n        self.tap_positions = &#91;0, 10, 30, 31]  # \u793a\u4f8b\u53cd\u9988\u4f4d\u4f4d\u7f6e\n        self.length = 32  # \u56fa\u5b9a32\u4f4d\u957f\u5ea6\n\n    def next_bit(self):\n        # \u8ba1\u7b97\u53cd\u9988\u4f4d\n        feedback_bit = 0\n        for tap in self.tap_positions:\n            feedback_bit ^= (self.state >> (self.length - tap - 1)) &amp; 1\n\n        # \u66f4\u65b0\u72b6\u6001\n        self.state = ((self.state &lt;&lt; 1) | feedback_bit) &amp; 0xffffffff\n        return feedback_bit\n\n    def generate_bits_list(self, n):\n        return &#91;self.next_bit() for _ in range(n)]\n\n    def generate_bits_str(self, n):\n        bits = self.generate_bits_list(n)\n        return ''.join(str(bit) for bit in bits)\n\n    def generate_bytes(self, n):\n        bits = self.generate_bits_str(n * 8)\n        bits_int = int(bits, 2)\n        bits_bytes = bits_int.to_bytes(n, 'big')\n        return bits_bytes\n\n    def encrypt(self, message):\n        '''\n        \u5bf9message\u8fdb\u884c\u6d41\u5bc6\u7801\u52a0\u5bc6\n        :param message: \u660e\u6587\uff0c\u7c7b\u578b\u4e3abytes\n        :return: \u5bc6\u6587\uff0c\u7c7b\u578b\u4e3abytes\n        '''\n        # \u5728\u6b64\u5904\u586b\u5199\u4ee3\u7801\n        keystream = self.generate_bytes(len(message))\n        cipher=xor(keystream,message)\n        \n        return cipher\nif __name__ == '__main__':\n\n    #\u8bfb\u53d6\u660e\u6587\n    message = input().encode('utf8')\n    #\u8bfb\u53d6\u5bc6\u94a5\n    key = bytes.fromhex(input())\n    #\u5c06\u5bc6\u94a5\u8bbe\u7f6e\u4e3aLFSR\u79cd\u5b50\n    lfsr = LFSR(key)\n    #\u8c03\u7528LFSR\u7684encrypt\u51fd\u6570\u5bf9\u660e\u6587\u52a0\u5bc6\n    cipher = lfsr.encrypt(message)\n    #\u752816\u8fdb\u5236\u5c06\u5bc6\u6587\u5b57\u8282\u8f93\u51fa\n    print(cipher.hex())<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-86ea714c1b676e882aa1171ddf756258\"><code>#\u7b2c3\u5173\uff1a\u5229\u7528LFSR\u5b9e\u73b0\u6d41\u5bc6\u7801\u89e3\u5bc6\ndef xor(bs1, bs2):\n    return bytes(a ^ b for a, b in zip(bs1, bs2))\n\nclass LFSR:\n    def __init__(self, seed):\n        # \u786e\u4fdd\u79cd\u5b50\u662f\u4e00\u4e2abytes\n        seed = int.from_bytes(seed, byteorder='big')\n        self.state = seed\n        self.tap_positions = &#91;0, 10, 30, 31]  # \u793a\u4f8b\u53cd\u9988\u4f4d\u4f4d\u7f6e\n        self.length = 32  # \u56fa\u5b9a32\u4f4d\u957f\u5ea6\n\n    def next_bit(self):\n        # \u8ba1\u7b97\u53cd\u9988\u4f4d\n        feedback_bit = 0\n        for tap in self.tap_positions:\n            feedback_bit ^= (self.state >> (self.length - tap - 1)) &amp; 1\n\n        # \u66f4\u65b0\u72b6\u6001\n        self.state = ((self.state &lt;&lt; 1) | feedback_bit) &amp; 0xffffffff\n        return feedback_bit\n\n    def generate_bits_list(self, n):\n        return &#91;self.next_bit() for _ in range(n)]\n\n    def generate_bits_str(self, n):\n        bits = self.generate_bits_list(n)\n        return ''.join(str(bit) for bit in bits)\n\n    def generate_bytes(self, n):\n        bits = self.generate_bits_str(n * 8)\n        bits_int = int(bits, 2)\n        bits_bytes = bits_int.to_bytes(n, 'big')\n        return bits_bytes\n\n    def encrypt(self, message):\n        '''\n        \u5bf9message\u8fdb\u884c\u6d41\u5bc6\u7801\u52a0\u5bc6\n        :param message: \u660e\u6587\uff0c\u7c7b\u578b\u4e3abytes\n        :return: \u5bc6\u6587\uff0c\u7c7b\u578b\u4e3abytes\n        '''\n        length_message = len(message)\n        key_stream = lfsr.generate_bytes(length_message)\n        cipher = xor(message, key_stream)\n        return cipher\nif __name__ == '__main__':\n\n    #\u8bfb\u53d6\u5bc6\u6587\n    cipher = bytes.fromhex(input())\n    #\u8bfb\u53d6\u5bc6\u94a5\n    key = bytes.fromhex(input())\n    #\u5bf9\u5bc6\u6587\u89e3\u5bc6\n    #\u5728\u6b64\u5904\u586b\u5199\u4ee3\u7801\n    lfsr = LFSR(key)\n    plain = lfsr.encrypt(cipher)\n    #utf8\u5bf9\u660e\u6587\u5b57\u8282\u5e8f\u5217\u89e3\u7801\u540e\u8f93\u51fa\n    print(plain.decode('utf8'))\n<\/code><\/pre>\n\n\n\n<p><strong>2-\u8bfe\u4e2d \u6d41\u5bc6\u7801\u52a0\u89e3\u5bc6<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-47c4a65a21d64815e86ec86956fbcb49\"><code>#\u7b2c1\u5173\uff1a\u6d41\u5bc6\u7801\u52a0\u5bc6\ndef RC4_generate_keystream(key, length):\n    #\u521d\u59cb\u5316RC4\u72b6\u6001\n    key_length = len(key)\n    S = list(range(256))  # S\u76d2\n    j = 0\n    for i in range(256):\n        j = (j + S&#91;i] + key&#91;i % key_length]) % 256\n        S&#91;i], S&#91;j] = S&#91;j], S&#91;i]  # \u4ea4\u6362S&#91;i]\u548cS&#91;j]\n    #\u751f\u6210\u5bc6\u94a5\u6d41\n    i = j = 0\n    keystream = &#91;]\n    for _ in range(length):\n        i = (i + 1) % 256\n        j = (j + S&#91;i]) % 256\n        S&#91;i], S&#91;j] = S&#91;j], S&#91;i]  # \u4ea4\u6362S&#91;i]\u548cS&#91;j]\n        K = S&#91;(S&#91;i] + S&#91;j]) % 256]\n        keystream.append(K)\n    return keystream\n\ndef xor(bs1, bs2):\n    return bytes(a ^ b for a, b in zip(bs1, bs2))\n\n# \u5728\u4e0b\u65b9\u7684Begin\u548cEnd\u4e4b\u95f4\u586b\u5199\u4ee3\u7801\uff0c\u5220\u9664#\u5f00\u5934\u7684\u6ce8\u91ca\uff0c\u5b9e\u73b0\u6d41\u5bc6\u7801\u52a0\u5bc6\uff0c\u540e\u8f93\u51fa\u7ed3\u679c\n# =========================Begin==========================\ndef RC4_encrypt(key, plaintext):\n    '''\n    :param key:\u5bc6\u94a5\uff0c\u7c7b\u578b\u4e3abytes\n    :param plaintext: \u660e\u6587\uff0c\u7c7b\u578b\u4e3abytes\n    :return: \u52a0\u5bc6\u540e\u7684\u5bc6\u6587\uff0c\u7c7b\u578b\u4e3abytes\n    '''\n    # \u5728\u6b64\u5904\u586b\u5199\u4ee3\u7801\n    key_length = 256\n    keystream=RC4_generate_keystream(key, key_length)\n    cipher_bytes=xor(keystream,plaintext)\n    return cipher_bytes\n# =========================End============================\n\nkey = bytes.fromhex(input(\"\"))\nplaintext = input(\"\").encode('utf8')\ncipher_bytes = RC4_encrypt(key, plaintext)\nprint(cipher_bytes.hex())\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-408230e6f3ac05523619f11f332a4597\"><code>#\u7b2c2\u5173\uff1a\u6d41\u5bc6\u7801\u89e3\u5bc6\ndef RC4_generate_keystream(key, length):\n    #\u59cb\u5316RC4\u72b6\u6001\n    key_length = len(key)\n    S = list(range(256))  # S\u76d2\n    j = 0\n    for i in range(256):\n        j = (j + S&#91;i] + key&#91;i % key_length]) % 256\n        S&#91;i], S&#91;j] = S&#91;j], S&#91;i]  # \u4ea4\u6362S&#91;i]\u548cS&#91;j]\n    #\u751f\u6210\u5bc6\u94a5\u6d41\n    i = j = 0\n    keystream = &#91;]\n    for _ in range(length):\n        i = (i + 1) % 256\n        j = (j + S&#91;i]) % 256\n        S&#91;i], S&#91;j] = S&#91;j], S&#91;i]  # \u4ea4\u6362S&#91;i]\u548cS&#91;j]\n        K = S&#91;(S&#91;i] + S&#91;j]) % 256]\n        keystream.append(K)\n    return keystream\n\ndef xor(bs1, bs2):\n    return bytes(a ^ b for a, b in zip(bs1, bs2))\n\n# \u5728\u4e0b\u65b9\u7684Begin\u548cEnd\u4e4b\u95f4\u586b\u5199\u4ee3\u7801\uff0c\u5220\u9664#\u5f00\u5934\u7684\u6ce8\u91ca\uff0c\u5b9e\u73b0\u6d41\u5bc6\u7801\u89e3\u5bc6\uff0c\u540e\u8f93\u51fa\u7ed3\u679c\n# =========================Begin==========================\ndef RC4_decrypt(key, ciphertext):\n    '''\n    :param key:\u5bc6\u94a5\uff0c\u7c7b\u578b\u4e3abytes\n    :param ciphertext: \u5bc6\u94a5\uff0c\u7c7b\u578b\u4e3abytes\n    :return: \u89e3\u5bc6\u540e\u7684\u660e\u6587\uff0c\u7c7b\u578b\u4e3abytes\n    '''\n    # \u5728\u6b64\u5904\u586b\u5199\u4ee3\u7801\n    keylength=256\n    keystream=RC4_generate_keystream(key, keylength)\n    plaintext=xor(keystream,ciphertext)\n    return plaintext\n# =========================End============================\n\nkey = bytes.fromhex(input(\"\"))\nciphertext = bytes.fromhex(input(\"\"))\nplaintext = RC4_decrypt(key, ciphertext)\nprint(plaintext.decode('utf8'))\n<\/code><\/pre>\n\n\n\n<p><strong>3-\u8bfe\u540e \u6d41\u5bc6\u7801\u4e0e\u5df2\u77e5\u660e\u6587\u653b\u51fb<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-55539739035bbb5267d6cc64d9a3337e\"><code>#\u7b2c1\u5173\uff1a\u5df2\u77e5\u660e\u6587\u653b\u51fb\ndef xor(bs1, bs2):\n    return bytes(a ^ b for a, b in zip(bs1, bs2))\n#\u5047\u8bbe\u5df2\u77e5\u4e24\u6761\u5bc6\u6587\uff0c\u8fd9\u4e24\u4e2a\u5bc6\u6587\u5206\u522b\u7531\u4e24\u6761\u660e\u6587\u6d88\u606f\u4f7f\u7528\u7684\u76f8\u540c\u7684\u5bc6\u94a5\u901a\u8fc7\u6d41\u5bc6\u7801\u52a0\u5bc6\u5f97\u6765\uff0c\u4e14\u5df2\u77e5\u7b2c\u4e00\u6761\u5bc6\u6587\u5bf9\u5e94\u7684\u660e\u6587\u6d88\u606f\uff0c\u8bf7\u60f3\u529e\u6cd5\u8fd8\u539f\u51fa\u7b2c\u4e8c\u6761\u5bc6\u6587\u5bf9\u5e94\u7684\u660e\u6587\u6d88\u606f\ncipher1 = bytes.fromhex(input(\"\"))\ncipher2 = bytes.fromhex(input(\"\"))\nmessage1 = bytes.fromhex(input(\"\"))\n\n# \u5728\u4e0b\u65b9\u7684Begin\u548cEnd\u4e4b\u95f4\u586b\u5199\u4ee3\u7801\uff0c\u5220\u9664#\u5f00\u5934\u7684\u6ce8\u91ca\uff0c\u5b9e\u73b0\u7834\u89e3\u5bc6\u6587\uff0c\u540e\u8f93\u51fa\u7ed3\u679c\n# =========================Begin==========================\ndef crack_message2(cipher1, cipher2, message1):\n    '''\n    :param cipher1:\u5df2\u77e5\u7684\u7b2c\u4e00\u6761\u5bc6\u6587\uff0c\u7c7b\u578b\u4e3abytes\n    :param cipher2: \u5df2\u77e5\u7684\u7b2c\u4e8c\u6761\u5bc6\u6587\uff0c\u7c7b\u578b\u4e3abytes\n    :param message1: \u5df2\u77e5\u7684\u7b2c\u4e00\u6761\u5bc6\u6587\u5bf9\u5e94\u7684\u660e\u6587\uff0c\u7c7b\u578b\u4e3abytes\n    :return: \u7b2c\u4e8c\u6761\u5bc6\u6587\u5bf9\u5e94\u7684\u660e\u6587\uff0c\u7c7b\u578b\u4e3abytes\n    '''\n    keystream=xor(cipher1,message1)\n    message2=xor(cipher2,keystream)\n    \n    return message2\n# =========================End============================\n\nmessage2 = crack_message2(cipher1, cipher2, message1)\nprint(message2.hex())<\/code><\/pre>\n\n\n\n<p class=\"has-accent-1-color has-text-color has-link-color has-larger-font-size wp-elements-7eebf9a1038f3d093e5930740154c66d\"><strong>\u7b2c\u4e00\u6b21\u8bfe<\/strong><\/p>\n\n\n\n<p><strong>1-\u8bfe\u524d \u5b57\u8282\u5e8f\u5217\u5f02\u6216\u8ba1\u7b97<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-f9cc7da29e39a58c9ba84e05f67b2b64\"><code>def xor(bs1, bs2):\n    # =========================Begin==========================\n    result = bytes(a ^ b for a, b in zip(bs1, bs2))\n    # =========================end==========================\n    return result\n    \n# \u4ece\u952e\u76d8\u8f93\u5165\u4e24\u4e2a\u5b57\u8282\u5e8f\u5217\nbs1_hex = input(\"\")\nbs2_hex = input(\"\")\n\n# \u5c06\u8f93\u5165\u7684\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u5b57\u8282\u5e8f\u5217\nbs1 = bytes.fromhex(bs1_hex)\nbs2 = bytes.fromhex(bs2_hex)\n\nxor_result = xor(bs1, bs2)\nprint(xor_result.hex())<\/code><\/pre>\n\n\n\n<p><strong>2-\u8bfe\u4e2d-\u66b4\u529b\u7834\u89e3<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-e91f57911569902976a28f06c2d70110\"><code>def Caesar_decrypt(key, cipher):\n    message = ''\n    for t in cipher:\n        if ord(t) &gt;= ord('A') and ord(t) &lt;= ord('Z'):\n            t_int = ord(t) - ord('A')\n            m_int = (t_int - key) % 26\n            m = chr(m_int + ord('A'))\n            message += m\n        elif ord(t) &gt;= ord('a') and ord(t) &lt;= ord('z'):\n            t_int = ord(t) - ord('a')\n            m_int = (t_int - key) % 26\n            m = chr(m_int + ord('a'))\n            message += m\n        else:\n            message += t\n    return message\n\n# \u8bfb\u5165\u51ef\u6492\u5bc6\u7801\u52a0\u5bc6\u540e\u7684\u5bc6\u6587\nimport sys\nencrypt_text = sys.stdin.read()\n# \u66b4\u529b\u7834\u89e3\u5bc6\u94a5\u548c\u660e\u6587\n# \u904d\u5386\u5bc6\u94a5\u6240\u6709\u53ef\u80fd\u7684\u503c\uff0c\u5e76\u89e3\u5bc6\u76f8\u5e94\u7684\u660e\u6587\nfor key in range(26) :\n    print('\\n*********************************************')\n    print('\u5c1d\u8bd5\u5bc6\u94a5\uff1a', key)\n    plain_text = Caesar_decrypt(key, encrypt_text)\n    print(plain_text)\n\n# \u8bf7\u5206\u6790\u4e0a\u9762\u66b4\u529b\u7834\u89e3\u7ed3\u679c\uff0c\u5220\u9664\u6a2a\u7ebf\uff0c\u8f93\u5165\u6b63\u786e\u7684\u5bc6\u94a5\u503c\u5e76\u89e3\u5bc6\u51fa\u6b63\u786e\u7684\u660e\u6587\nprint('\u6700\u6709\u53ef\u80fd\u7684\u5bc6\u94a5\u4e3a\uff1a', 13)\nplain_text = Caesar_decrypt(13, encrypt_text)\nprint(plain_text)<\/code><\/pre>\n\n\n\n<p><strong>3-\u8bfe\u540e-\u9891\u7387\u5206\u6790<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-bca9732060333297acef674cb16b9648\"><code>#\u7b2c1\u5173\uff1a\u7b80\u5355\u7684\u9891\u7387\u5206\u6790\n\nfrom CaesarDecrypt import Caesar_decrypt\n\n# \u8bfb\u53d6\u52a0\u5bc6\u6587\u672c\nimport sys\nencrypted_text = sys.stdin.read()\n\n# \u521b\u5efa\u4e00\u4e2a\u5b57\u5178\u6765\u5b58\u50a8\u5b57\u6bcd\u9891\u7387\nfrequency = {}\n\n# \u904d\u5386\u6587\u672c\u4e2d\u7684\u6bcf\u4e2a\u5b57\u7b26\nfor char in encrypted_text.lower():\n    # \u53ea\u7edf\u8ba1\u82f1\u6587\u5b57\u6bcd\n    if char.isalpha():\n        if char in frequency:\n            frequency&#91;char] += 1\n        else:\n            frequency&#91;char] = 1\n\n# \u5c06\u5b57\u5178\u8f6c\u6362\u4e3a\u5217\u8868\nfrequency_list = &#91;(char, freq) for char, freq in frequency.items()]\n\n# \u6309\u7167\u9891\u7387\u7531\u9ad8\u5230\u4f4e\u6392\u5e8f\u5217\u8868\nfrequency_list.sort(key=lambda x: x&#91;1], reverse=True)\n\n# \u627e\u5230\u51fa\u73b0\u9891\u7387\u6700\u9ad8\u7684\u5b57\u7b26\nhighest_frequency_char = max(frequency, key=frequency.get)\n\n# \u8ba1\u7b97\u8fd9\u4e2a\u5b57\u7b26\u4e0e\u5b57\u6bcd'E'\u4e4b\u95f4\u7684\u5dee\u8ddd\uff0c\u5373\u4e3a\u6700\u6709\u53ef\u80fd\u5f97\u5bc6\u94a5\nbest_key = ord( highest_frequency_char ) - ord('e')\n\n# \u5229\u7528\u5bc6\u94a5\u5bf9\u5bc6\u6587\u89e3\u5bc6\u5e76\u8f93\u51fa \nplaintext = Caesar_decrypt(best_key, encrypted_text)\nprint(plaintext)<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-accent-2-color has-text-color has-link-color wp-elements-fe4dd470bf758b4d2ed2f1fab4c9cb31\"><code>#\u7b2c2\u5173\uff1a\u57fa\u4e8e\u91cd\u5408\u6307\u6570\u7684\u9891\u7387\u5206\u6790\n\n# \u6b63\u5e38\u82f1\u6587\u5b57\u7b26\u9891\u7387\u5206\u5e03\uff08\u57fa\u4e8e\u82f1\u6587\u7edf\u8ba1\u6570\u636e\uff09\nnormal_frequency = {\n    'a': 8.167, 'b': 1.492, 'c': 2.782, 'd': 4.253, 'e': 12.702,\n    'f': 2.228, 'g': 2.015, 'h': 6.094, 'i': 6.966, 'j': 0.153,\n    'k': 0.772, 'l': 4.025, 'm': 2.406, 'n': 6.749, 'o': 7.507,\n    'p': 1.929, 'q': 0.095, 'r': 5.987, 's': 6.327, 't': 9.056,\n    'u': 2.758, 'v': 0.978, 'w': 2.360, 'x': 0.150, 'y': 1.974,\n    'z': 0.074\n}\n\n# \u8bfb\u53d6\u52a0\u5bc6\u6587\u672c\nimport sys\nencrypted_text = sys.stdin.read()\n\n# \u7edf\u8ba1\u5bc6\u6587\u5b57\u7b26\u9891\u7387\nencrypted_frequency = {}\nfor char in encrypted_text.lower():\n    if char.isalpha():\n        encrypted_frequency&#91;char] = encrypted_frequency.get(char, 0) + 1\n\n# \u8ba1\u7b97\u91cd\u5408\u6307\u6570\ndef calculate_coincidence_index(frequency, normal_freq):\n    sum_of_square_of_fi = 0\n    sum_of_square_of_ni = 0\n    sum_of_cross_multiplication_of_fi_and_ni = 0\n    for char in 'abcdefghijklmnopqrstuvwxyz':\n        sum_of_square_of_fi += (frequency&#91;char] * frequency&#91;char])\n        sum_of_square_of_ni += (normal_freq&#91;char] * normal_freq&#91;char])\n        sum_of_cross_multiplication_of_fi_and_ni += frequency&#91;char] * normal_freq&#91;char]\n    return sum_of_cross_multiplication_of_fi_and_ni\/(sum_of_square_of_fi*sum_of_square_of_ni)\n\n    return coincidences\n\n# \u8ba1\u7b97\u6bcf\u4e2a\u53ef\u80fd\u7684\u79fb\u4f4d\u5bc6\u94a5\u7684\u91cd\u5408\u6307\u6570\nfor shift in range(26):\n    shifted_freq = {chr((ord(char) - 97 + shift) % 26 + 97): freq\n                    for char, freq in encrypted_frequency.items()}\n    coincidence_index = calculate_coincidence_index(shifted_freq, normal_frequency)\n    # print('\u79fb\u4f4d', shift, '\u7684\u91cd\u5408\u6307\u6570\u4e3a',coincidence_index)\n\n# \u627e\u5230\u6700\u9ad8\u91cd\u5408\u6307\u6570\u5bf9\u5e94\u7684\u79fb\u4f4d\nbest_shift = max(range(26), key=lambda shift: calculate_coincidence_index(\n    {chr((ord(char) - 97 + shift) % 26 + 97): freq\n     for char, freq in encrypted_frequency.items()}, normal_frequency))\nbest_key = 26 - best_shift\n\n#\u4f7f\u7528\u6700\u6709\u53ef\u80fd\u7684\u5bc6\u94a5\u89e3\u5bc6\uff0c\u5c06\u89e3\u5bc6\u6240\u5f97\u660e\u6587\u5199\u5165\u76ee\u6807\u6587\u4ef6\nfrom CaesarDecrypt import Caesar_decrypt\nplain_cracked = Caesar_decrypt(best_key, encrypted_text)\nprint(plain_cracked)<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u7b2c\u4e8c\u6b21\u8bfe 1_\u8bfe\u524d\uff1a\u6d41\u5bc6\u7801BBF\u5b9e\u9a8c-Build  &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[31,32],"_links":{"self":[{"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/posts\/640"}],"collection":[{"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/comments?post=640"}],"version-history":[{"count":9,"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/posts\/640\/revisions"}],"predecessor-version":[{"id":679,"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/posts\/640\/revisions\/679"}],"wp:attachment":[{"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/media?parent=640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/categories?post=640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sxr666.cn\/index.php\/wp-json\/wp\/v2\/tags?post=640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}