{"id":493,"date":"2020-11-19T17:34:52","date_gmt":"2020-11-19T09:34:52","guid":{"rendered":"http:\/\/123.57.142.208\/?p=493"},"modified":"2021-06-21T19:15:07","modified_gmt":"2021-06-21T11:15:07","slug":"des%e5%af%b9%e7%a7%b0%e5%8a%a0%e5%af%86%e7%ae%97%e6%b3%95","status":"publish","type":"post","link":"http:\/\/43.142.23.155\/?p=493","title":{"rendered":"DES\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5demo"},"content":{"rendered":"\n<p class=\"has-large-font-size\">1\u3001\u7b80\u8ff0<\/p>\n\n\n\n<p><br>1)\u3001\u8f93\u5165 64 \u4f4d\u660e\u6587\u6570\u636e\uff0c\u5e76\u8fdb\u884c\u521d\u59cb\u7f6e\u6362 IP\uff1b<br>2)\u3001\u5728\u521d\u59cb\u7f6e\u6362 IP \u540e\uff0c\u660e\u6587\u6570\u636e\u518d\u88ab\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u6bcf\u90e8\u5206 32 \u4f4d\uff0c\u4ee5 L0\uff0c<br>R0 \u8868\u793a\uff1b<br>3)\u3001\u5728\u5bc6\u94a5\u7684\u63a7\u5236\u4e0b\uff0c\u7ecf\u8fc7 16 \u8f6e\u8fd0\u7b97(f)\uff1b<br>4)\u300116 \u8f6e\u540e\uff0c\u5de6\u3001\u53f3\u4e24\u90e8\u5206\u4ea4\u6362\uff0c\u5e76\u8fde\u63a5\u518d\u4e00\u8d77\uff0c\u518d\u8fdb\u884c\u9006\u7f6e\u6362\uff1b<br>5)\u3001\u8f93\u51fa 64 \u4f4d\u5bc6\u6587\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u65f6\u53ef\u80fd\u7528\u5230\u7684\u53c2\u6570\uff1a<br>key\uff1a8 \u4e2a\u5b57\u8282\u5171 64 \u4f4d\u7684\u5de5\u4f5c\u5bc6\u94a5<br>data\uff1a8 \u4e2a\u5b57\u8282\u5171 64 \u4f4d\u7684\u9700\u8981\u88ab\u52a0\u5bc6\u6216\u88ab\u89e3\u5bc6\u7684\u6570\u636e<br>mode\uff1aDES \u5de5\u4f5c\u65b9\u5f0f\uff0c\u52a0\u5bc6\u6216\u8005\u89e3\u5bc6<\/p>\n\n\n\n<p class=\"has-large-font-size\">2\u3001\u7b80\u5355\u7684python\u5b9e\u73b0\uff08\u975epyDES\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'''\u5bc6\u94a5K\u751f\u6210\u6a21\u5757'''\n\nMaxTime = 16\n     #\u751f\u6210\u5b50\u5bc6\u94a5\u7684\u7f6e\u6362\u88681\uff0c\u5c0664\u4f4d\u7684\u5bc6\u94a5\u8f6c\u6362\u4e3a56\u4f4d\nkey_table1=&#91; 57, 49, 41, 33, 25, 17,  9,\n             1, 58, 50, 42, 34, 26, 18,\n             10,  2, 59, 51, 43, 35, 27,\n             19, 11,  3, 60, 52, 44, 36,\n             63, 55, 47, 39, 31, 23, 15,\n             7, 62, 54, 46, 38, 30, 22,\n             14,  6, 61, 53, 45, 37, 29,\n             21, 13,  5, 28, 20, 12,  4 ]\n    #\u751f\u6210\u5b50\u5bc6\u94a5\u7684\u7f6e\u6362\u88682\uff0c\u5c0656\u4f4d\u7684\u5bc6\u94a5\u8f6c\u6362\u4e3a48\u4f4d\nkey_table2=&#91; 14, 17, 11, 24,  1,  5,\n             3, 28, 15,  6, 21, 10,\n             23, 19, 12,  4, 26,  8,\n             16,  7, 27, 20, 13,  2,\n             41, 52, 31, 37, 47, 55,\n             30, 40, 51, 45, 33, 48,\n             44, 49, 39, 56, 34, 53,\n             46, 42, 50, 36, 29, 32 ]\n\ndef Listmove(l, step):    #\u5c06\u5217\u8868\u4e2d\u7684\u5143\u7d20\u5faa\u73af\u5de6\u79fb\n    return l&#91;step:] + l&#91;:step]\n\ndef Subkey(key):    #\u751f\u6210\u5b50\u5bc6\u94a5\n    keyresult = &#91;]\n    key0 = &#91;0 for i in range(56)]\n\n    for i in range(len(key_table1)):\n        key0&#91;i] = key&#91;key_table1&#91;i]-1]\n\n    #\u751f\u621016\u4e2a\u5bc6\u94a5\n    for i in range(MaxTime):\n        key1 = &#91;0 for i in range(48)]\n        #\u786e\u5b9a\u6bcf\u6b21\u5de6\u79fb\u7684\u6b65\u6570\n        if (i == 0 or i == 1 or i == 8 or i == 15):\n            step = 1\n        else:\n            step = 2\n        #\u5206\u6210\u4e24\u7ec4\n        tmp1 = key0&#91;0:28]\n        tmp2 = key0&#91;28:56]\n        #\u5faa\u73af\u5de6\u79fb\n        tmp1 = Listmove(tmp1, step)\n        tmp2 = Listmove(tmp2, step)\n        #\u5de6\u53f3\u8fde\u63a5\n        key0 = tmp1 + tmp2\n        #\u7f6e\u6362\u9009\u62e9\n        for i in range(len(key_table2)):\n            key1&#91;i] = key0&#91;key_table2&#91;i]-1]\n        #\u751f\u6210\u5bc6\u94a5\n        keyresult.append(key1)\n    #\u8fd4\u56de\u7684\u662f\u4e00\u4e2a\u96c6\u5408\u5305\u542b\u4e86\u6bcf\u6b21\u7684\u5bc6\u94a5\n    return keyresult\n\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>import CreateSubkey as cs\nimport F_function as f\n\n\n'''DES\u52a0\u5bc6\u6a21\u5757'''\n\n# \u5341\u516d\u8fdb\u5236\u8f6c\u4e8c\u8fdb\u5236\u6bd4\u7279\u4e32\ndef Hex2bin(text):\n    result = &#91;]\n    for i in range(len(text)):\n        result.extend(f.int2bit(int(text&#91;i],16)))\n    return result \n\n# \u4e8c\u8fdb\u5236\u6bd4\u7279\u4e32\u8f6c\u5341\u516d\u8fdb\u5236\ndef bin2Hex(text):\n    result = &#91;]\n    q = len(text)\/\/4\n    for i in range(q):\n        dec = int(text&#91;4*i])*8 + int(text&#91;4*i+1])*4 + int(text&#91;4*i+2])*2 + int(text&#91;4*i+3])*1\n        x = hex(dec)&#91;2:].upper()\n        result.extend(x)\n    rs = ''.join(result)\n    return rs\n\n# \u6309\u7167DES\u7b97\u6cd5\u7684\u6d41\u7a0b\u56fe\u8fdb\u884c\u8fd0\u7b97\ndef Encryption(text, key):\n    keylist = cs.Subkey(keybit)\n    text1 = f.IP(text, 0)  #IP\u7f6e\u6362\n    L = &#91;text1&#91;i] for i in range(32)]\n    R = &#91;text1&#91;i] for i in range(32,64)]\n    for i in range(16):\n        tmp = R\n        tmp = f.Extend(tmp)\n        tmp = f.Xor(tmp, keylist&#91;i])\n        tmp = f.S_replace(tmp)\n        tmp = f.P_replace(tmp)\n        tmp = f.Xor(tmp, L)\n        L = R\n        R = tmp\n    L,R = R,L\n    ctext = L\n    ctext.extend(R)\n    ctext = f.IP(ctext, 1)\n    return bin2Hex(ctext)\n\nif __name__ == '__main__':\n    plaintext = input('\u8bf7\u8f93\u5165\u7528\u5341\u516d\u8fdb\u5236\u8868\u793a\u7684\u660e\u6587\uff1a') \n    key = input('\u8bf7\u8f93\u5165\u7528\u5341\u516d\u8fdb\u5236\u8868\u793a\u7684\u5bc6\u94a5\uff1a')\n    ptext = Hex2bin(plaintext)\n    keybit = Hex2bin(key)\n    print('\u8f93\u51fa\u7684\u5bc6\u6587\u4e3a\uff1a' + Encryption(ptext, keybit))\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>import CreateSubkey as cs\nimport F_function as f\n\n\n#\u5341\u516d\u8fdb\u5236\u8f6c\u4e8c\u8fdb\u5236\u6bd4\u7279\u4e32\ndef Hex2bin(text):\n    result = &#91;]\n    for i in range(len(text)):\n        result.extend(f.int2bit(int(text&#91;i],16)))\n    return result\n#\u4e8c\u8fdb\u5236\u6bd4\u7279\u4e32\u8f6c\u5341\u516d\u8fdb\u5236\ndef bin2Hex(text):\n    result = &#91;]\n    q = len(text)\/\/4\n    for i in range(q):\n        dec = int(text&#91;4*i])*8 + int(text&#91;4*i+1])*4 + int(text&#91;4*i+2])*2 + int(text&#91;4*i+3])*1\n        x = hex(dec)&#91;2:].upper()\n        result.extend(x)\n    rs = ''.join(result)\n    return rs\n\ndef Encryption(text, key):\n    keylist = cs.Subkey(keybit)\n    text1 = f.IP(text, 0)  #IP\u7f6e\u6362\n    L = &#91;text1&#91;i] for i in range(32)]\n    R = &#91;text1&#91;i] for i in range(32,64)]\n    for i in range(16):\n        tmp = R\n        tmp = f.Extend(tmp)\n        tmp = f.Xor(tmp, keylist&#91;15-i])\n        tmp = f.S_replace(tmp)\n        tmp = f.P_replace(tmp)\n        tmp = f.Xor(tmp, L)\n        L = R\n        R = tmp\n    L,R = R,L\n    ctext = L\n    ctext.extend(R)\n    ctext = f.IP(ctext, 1)\n    return bin2Hex(ctext)\n\nif __name__ == '__main__':\n    plaintext = input('\u8bf7\u8f93\u5165\u7528\u5341\u516d\u8fdb\u5236\u8868\u793a\u7684\u5bc6\u6587\uff1a') \n    key = input('\u8bf7\u8f93\u5165\u7528\u5341\u516d\u8fdb\u5236\u8868\u793a\u7684\u5bc6\u94a5\uff1a')\n    ptext = Hex2bin(plaintext)\n    keybit = Hex2bin(key)\n    print('\u8f93\u51fa\u7684\u660e\u6587\u4e3a\uff1a' + Encryption(ptext, keybit))\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>'''F-function\u6a21\u5757'''\n\nMaxTime = 16\n#IP\u7f6e\u6362\u8868\nIP_table=&#91;58, 50, 42, 34, 26, 18, 10, 2,\n          60, 52, 44, 36, 28, 20, 12, 4,\n          62, 54, 46, 38, 30, 22, 14, 6,\n          64, 56, 48, 40, 32, 24, 16, 8,\n          57, 49, 41, 33, 25, 17,  9, 1,\n          59, 51, 43, 35, 27, 19, 11, 3,\n          61, 53, 45, 37, 29, 21, 13, 5,\n          63, 55, 47, 39, 31, 23, 15, 7 ]\n #\u9006IP\u7f6e\u6362\u8868\nInv_IP_table=&#91;40,  8, 48, 16, 56, 24, 64, 32,\n               39,  7, 47, 15, 55, 23, 63, 31,\n               38,  6, 46, 14, 54, 22, 62, 30,\n               37,  5, 45, 13, 53, 21, 61, 29,\n               36,  4, 44, 12, 52, 20, 60, 28,\n               35,  3, 43, 11, 51, 19, 59, 27,\n               34,  2, 42, 10, 50, 18, 58, 26,\n               33,  1, 41,  9, 49, 17, 57, 25 ]\n#S\u76d2\u4e2d\u7684S1\u76d2\nS1=&#91;14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7,\n      0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8,\n      4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0,\n     15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13 ]\n#S\u76d2\u4e2d\u7684S2\u76d2\nS2=&#91;15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10,\n      3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5,\n      0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15,\n     13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9 ]\n#S\u76d2\u4e2d\u7684S3\u76d2\nS3=&#91;10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8,\n     13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1,\n     13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7,\n     1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12 ]\n#S\u76d2\u4e2d\u7684S4\u76d2\nS4=&#91; 7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15,\n     13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9,\n     10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4,\n     3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14 ]\n#S\u76d2\u4e2d\u7684S5\u76d2\nS5=&#91; 2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9,\n     14, 11,  2, 12,  4,  7, 13,  1,  5,  0, 15, 10,  3,  9,  8,  6,\n     4,  2,  1, 11, 10, 13,  7,  8, 15,  9, 12,  5,  6,  3,  0, 14,\n     11,  8, 12,  7,  1, 14,  2, 13,  6, 15,  0,  9, 10,  4,  5,  3 ]\n #S\u76d2\u4e2d\u7684S6\u76d2\nS6=&#91;12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11,\n    10, 15,  4,  2,  7, 12,  9,  5,  6,  1, 13, 14,  0, 11,  3,  8,\n    9, 14, 15,  5,  2,  8, 12,  3,  7,  0,  4, 10,  1, 13, 11,  6,\n    4,  3,  2, 12,  9,  5, 15, 10, 11, 14,  1,  7,  6,  0,  8, 13 ]\n#S\u76d2\u4e2d\u7684S7\u76d2\nS7=&#91; 4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1,\n     13,  0, 11,  7,  4,  9,  1, 10, 14,  3,  5, 12,  2, 15,  8,  6,\n     1,  4, 11, 13, 12,  3,  7, 14, 10, 15,  6,  8,  0,  5,  9,  2,\n     6, 11, 13,  8,  1,  4, 10,  7,  9,  5,  0, 15, 14,  2,  3, 12]\n#S\u76d2\u4e2d\u7684S8\u76d2\nS8=&#91;13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7,\n    1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2,\n    7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8,\n    2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11 ]\n# S\u76d2\nS=&#91;S1,S2,S3,S4,S5,S6,S7,S8]\n#\u7528\u4e8e\u5bf9\u6570\u636e\u8fdb\u884c\u6269\u5c55\u7f6e\u6362\uff0c\u5c0632bit\u6570\u636e\u6269\u5c55\u4e3a48bit\nextend_table=&#91;32,  1,  2,  3,  4,  5,\n              4,  5,  6,  7,  8,  9,\n              8,  9, 10, 11, 12, 13,\n              12, 13, 14, 15, 16, 17,\n              16, 17, 18, 19, 20, 21,\n              20, 21, 22, 23, 24, 25,\n              24, 25, 26, 27, 28, 29,\n              28, 29, 30, 31, 32,  1 ]\n#P\u76d2\nP_table=&#91; 16,  7, 20, 21, 29, 12, 28, 17,\n          1, 15, 23, 26,  5, 18, 31, 10,\n          2,  8, 24, 14, 32, 27,  3,  9,\n          19, 13, 30,  6, 22, 11,  4, 25 ]\n\ndef int2bit(n):#0~15\u6574\u6570\u8f6c\u6bd4\u7279\n    a=&#91;]\n    for i in range(0,4):\n        a.insert(0,str(n%2))\n        n=int(n\/2)\n    return a\n\n#IP\u7f6e\u6362\u90e8\u5206\uff0cop\u4e3a0\u8868\u793a\u6b63\u7f6e\u6362\uff0cop\u4e3a1\u8868\u793a\u9006\u7f6e\u6362\ndef IP(text, op):   \n    tmp = &#91;0 for i in range(64)]\n    if op == 0:\n       for i in range(64):\n           tmp&#91;i] = text&#91;IP_table&#91;i]-1]\n       return tmp\n    if op == 1:\n       for i in range(64):\n           tmp&#91;i] = text&#91;Inv_IP_table&#91;i]-1]\n       return tmp\n#\u8fdb\u884c\u6269\u5c55\uff0c\u5c0632\u4f4d\u6269\u5c55\u4e3a48\u4f4d\ndef Extend(text):\n    extend = &#91;0 for i in range(48)]\n    for i in range(48):\n        extend&#91;i] = text&#91;extend_table&#91;i] - 1]\n    return extend\n\n#S\u76d2\u53d8\u6362\u90e8\u5206\ndef S_replace(text):\n    Sresult = &#91;0 for k in range(32)]\n    for k in range(8):\n        row = 2*int(text&#91;k*6]) + int(text&#91;k*6+5])\n        column = 8*int(text&#91;k*6+1]) + 4*int(text&#91;k*6+2]) + 2*int(text&#91;k*6+3]) + int(text&#91;k*6+4])\n        tmp = S&#91;k]&#91;row*16+column]\n\n        for i in range(4):\n            Sresult&#91;4*k + i] = int2bit(tmp)&#91;i]\n    return Sresult\n#P\u7f6e\u6362\u90e8\u5206\ndef P_replace(text):\n    Presult = &#91;0 for i in range(32)]\n    for i in range(32):\n        Presult&#91;i] = text&#91;P_table&#91;i]-1]\n    return Presult\n#\u5f02\u6216\u8fd0\u7b97\ndef Xor(bit1, bit2):\n    Xorresult = &#91;0 for i in range(len(bit1))]\n    for i in range(len(bit1)):\n        Xorresult&#91;i] = str(int(bit1&#91;i]) ^ int(bit2&#91;i]))\n    return Xorresult\n<\/code><\/pre>\n\n\n\n<p>\u6bd4\u8f83\u61d2\uff0c\u5148\u5c31\u8fd9\u6837\u4e86<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1\u3001\u7b80\u8ff0 1)\u3001\u8f93\u5165 64 \u4f4d\u660e\u6587\u6570\u636e\uff0c\u5e76\u8fdb\u884c\u521d\u59cb\u7f6e\u6362 IP\uff1b2)\u3001\u5728\u521d\u59cb\u7f6e\u6362 IP \u540e\uff0c\u660e\u6587\u6570\u636e\u518d\u88ab\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u6bcf\u90e8\u5206 32 \u4f4d\uff0c\u4ee5 L0\uff0cR0 \u8868\u793a\uff1b3)\u3001\u5728\u5bc6\u94a5\u7684\u63a7\u5236\u4e0b\uff0c\u7ecf\u8fc7 16 \u8f6e\u8fd0\u7b97(&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[25,21],"class_list":["post-493","post","type-post","status-publish","format-standard","hentry","category-7","tag-des","tag-21"],"_links":{"self":[{"href":"http:\/\/43.142.23.155\/index.php?rest_route=\/wp\/v2\/posts\/493","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/43.142.23.155\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/43.142.23.155\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/43.142.23.155\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/43.142.23.155\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=493"}],"version-history":[{"count":1,"href":"http:\/\/43.142.23.155\/index.php?rest_route=\/wp\/v2\/posts\/493\/revisions"}],"predecessor-version":[{"id":573,"href":"http:\/\/43.142.23.155\/index.php?rest_route=\/wp\/v2\/posts\/493\/revisions\/573"}],"wp:attachment":[{"href":"http:\/\/43.142.23.155\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/43.142.23.155\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=493"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/43.142.23.155\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}