{"id":218,"date":"2022-11-27T15:30:06","date_gmt":"2022-11-27T07:30:06","guid":{"rendered":"https:\/\/shangwendada.co\/?p=218"},"modified":"2022-11-27T16:24:43","modified_gmt":"2022-11-27T08:24:43","slug":"algorithm%e5%af%b9%e7%a7%b0%e5%8a%a0%e5%af%86%e7%ae%97%e6%b3%95","status":"publish","type":"post","link":"https:\/\/blog.shangwendada.top\/index.php\/2022\/11\/27\/algorithm%e5%af%b9%e7%a7%b0%e5%8a%a0%e5%af%86%e7%ae%97%e6%b3%95\/","title":{"rendered":"[Algorithm]\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5"},"content":{"rendered":"<h1>RC4<\/h1>\n<h2>\u4ecb\u7ecd:<\/h2>\n<h3>\u7b80\u4ecb<\/h3>\n<p>\u5728\u5bc6\u7801\u5b66\u4e2d\uff0cRC4\uff08\u6765\u81eaRivest Cipher 4\u7684\u7f29\u5199\uff09\u662f\u4e00\u79cd\u6d41\u52a0\u5bc6\u7b97\u6cd5\uff0c\u5bc6\u94a5\u957f\u5ea6\u53ef\u53d8\u3002\u5b83\u52a0\u89e3\u5bc6\u4f7f\u7528\u76f8\u540c\u7684\u5bc6\u94a5\uff0c\u56e0\u6b64\u4e5f\u5c5e\u4e8e\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5\u3002RC4\u662f\u6709\u7ebf\u7b49\u6548\u52a0\u5bc6\uff08WEP\uff09\u4e2d\u91c7\u7528\u7684\u52a0\u5bc6\u7b97\u6cd5\uff0c\u4e5f\u66fe\u7ecf\u662fTLS\u53ef\u91c7\u7528\u7684\u7b97\u6cd5\u4e4b\u4e00\u3002<br \/>\n\u6d41\u5bc6\u7801\u5c5e\u4e8e\u5bf9\u79f0\u5bc6\u7801\uff0c\u4f46\u4e0e\u5206\u7ec4\u52a0\u5bc6\u7b97\u6cd5\u4e0d\u540c\u7684\u662f\uff0c\u6d41\u5bc6\u7801\u4e0d\u5bf9\u660e\u6587\u6570\u636e\u8fdb\u884c\u5206\u7ec4\uff0c\u800c\u662f\u7528\u5bc6\u94a5\u751f\u6210\u4e0e\u660e\u6587\u4e00\u6837\u957f\u77ed\u7684\u5bc6\u7801\u6d41\u5bf9\u660e\u6587\u8fdb\u884c\u52a0\u5bc6\uff0c\u52a0\u89e3\u5bc6\u4f7f\u7528\u76f8\u540c\u7684\u5bc6\u94a5\u3002<\/p>\n<h3>\u7279\u70b9<\/h3>\n<p>(1)\u3001\u7b97\u6cd5\u7b80\u6d01\u6613\u4e8e\u8f6f\u4ef6\u5b9e\u73b0\uff0c\u52a0\u5bc6\u901f\u5ea6\u5feb\uff0c\u5b89\u5168\u6027\u6bd4\u8f83\u9ad8\uff1b<br \/>\n(2)\u3001\u5bc6\u94a5\u957f\u5ea6\u53ef\u53d8\uff0c\u4e00\u822c\u7528256\u4e2a\u5b57\u8282\u3002<\/p>\n<h2>\u539f\u7406<\/h2>\n<h3>\u5173\u952e\u53d8\u91cf<\/h3>\n<p>1\u3001<strong>\u5bc6\u94a5\u6d41<\/strong>\uff1aRC4\u7b97\u6cd5\u7684\u5173\u952e\u662f\u6839\u636e\u660e\u6587\u548c\u5bc6\u94a5\u751f\u6210\u76f8\u5e94\u7684\u5bc6\u94a5\u6d41\uff0c\u5bc6\u94a5\u6d41\u7684\u957f\u5ea6\u548c\u660e\u6587\u7684\u957f\u5ea6\u662f\u5bf9\u5e94\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4\u660e\u6587\u7684\u957f\u5ea6\u662f500\u5b57\u8282\uff0c\u90a3\u4e48\u5bc6\u94a5\u6d41\u4e5f\u662f500\u5b57\u8282\u3002\u5f53\u7136\uff0c\u52a0\u5bc6\u751f\u6210\u7684\u5bc6\u6587\u4e5f\u662f500\u5b57\u8282\uff0c\u56e0\u4e3a<strong>\u5bc6\u6587\u7b2ci\u5b57\u8282=\u660e\u6587\u7b2ci\u5b57\u8282^\u5bc6\u94a5\u6d41\u7b2ci\u5b57\u8282<\/strong>\uff1b<\/p>\n<p>2\u3001<strong>\u72b6\u6001\u5411\u91cfS<\/strong>\uff1a\u957f\u5ea6\u4e3a256\uff0cS[0],S[1]&#8230;..S[255]\u3002\u6bcf\u4e2a\u5355\u5143\u90fd\u662f\u4e00\u4e2a\u5b57\u8282\uff0c\u7b97\u6cd5\u8fd0\u884c\u7684\u4efb\u4f55\u65f6\u5019\uff0cS\u90fd\u5305\u62ec0-255\u76848\u6bd4\u7279\u6570\u7684\u6392\u5217\u7ec4\u5408\uff0c\u53ea\u4e0d\u8fc7\u503c\u7684\u4f4d\u7f6e\u53d1\u751f\u4e86\u53d8\u6362\uff1b<\/p>\n<p>3\u3001<strong>\u4e34\u65f6\u5411\u91cfT<\/strong>\uff1a\u957f\u5ea6\u4e5f\u4e3a256\uff0c\u6bcf\u4e2a\u5355\u5143\u4e5f\u662f\u4e00\u4e2a\u5b57\u8282\u3002\u5982\u679c\u5bc6\u94a5\u7684\u957f\u5ea6\u662f256\u5b57\u8282\uff0c\u5c31\u76f4\u63a5\u628a\u5bc6\u94a5\u7684\u503c\u8d4b\u7ed9T\uff0c\u5426\u5219\uff0c\u8f6e\u8f6c\u5730\u5c06\u5bc6\u94a5\u7684\u6bcf\u4e2a\u5b57\u8282\u8d4b\u7ed9T\uff1b<\/p>\n<p>4\u3001<strong>\u5bc6\u94a5K<\/strong>\uff1a\u957f\u5ea6\u4e3a1-256\u5b57\u8282\uff0c\u6ce8\u610f\u5bc6\u94a5\u7684\u957f\u5ea6keylen \u4e0e\u660e\u6587\u957f\u5ea6\u3001\u5bc6\u94a5\u6d41\u7684\u957f\u5ea6\u6ca1\u6709\u5fc5\u7136\u5173\u7cfb\uff0c\u901a\u5e38\u5bc6\u94a5\u7684\u957f\u5ea6\u8da3\u547316\u5b57\u8282\uff08128\u6bd4\u7279\uff09\u3002<\/p>\n<h3>\u4e09\u6b65\u52a0\u5bc6<\/h3>\n<h4>\u521d\u59cb\u5316S\u548cT<\/h4>\n<pre><code class=\"language-cpp\"> int Len = strlen(key);\n for(i=0;i&lt;256;i++) {\n        s[i]=i;\n        T[i]=key[i%Len];\n    }<\/code><\/pre>\n<h4>\u521d\u59cb\u5316\u6392\u5217S<\/h4>\n<pre><code class=\"language-cpp\"> for(i=0;i&lt;256;i++) {\n        j=(j+s[i]+k[i])%256;\n        tmp=s[i];\n        s[i]=s[j];\/\/\u4ea4\u6362s[i]\u548cs[j]\n        s[j]=tmp;\n    }<\/code><\/pre>\n<h4>\u4ea7\u751f\u5bc6\u94a5\u6d41<\/h4>\n<pre><code class=\"language-cpp\">int i=0,j=0,t=0;\nunsigned long k=0;\nunsigned char tmp;\nfor(k=0;k &lt; len;k++)\n{\n    i=(i+1)%256;\n    j=(j+s[i])%256;\n    tmp=s[i];\n    s[i]=s[j]; \/\/\u4ea4\u6362s[x]\u548cs[y]\n    s[j]=tmp;\n}<\/code><\/pre>\n<h4>\u5b8c\u6574\u52a0\u5bc6\u89e3\u5bc6\u7a0b\u5e8f<\/h4>\n<pre><code class=\"language-cpp\">\/\/\u7a0b\u5e8f\u5f00\u59cb\n#include&lt;stdio.h&gt;\n#include&lt;string.h&gt;\ntypedef unsigned longULONG;\n\n\/*\u521d\u59cb\u5316\u51fd\u6570*\/\nvoid rc4_init(unsigned char*s, unsigned char*key, unsigned long Len)\n{\n    int i = 0, j = 0;\n    char k[256] = { 0 };\n    unsigned char tmp = 0;\n    for (i = 0; i&lt;256; i++)\n    {\n        s[i] = i;\n        k[i] = key[i%Len];\n    }\n    for (i = 0; i&lt;256; i++)\n    {\n        j = (j + s[i] + k[i]) % 256;\n        tmp = s[i];\n        s[i] = s[j];\/\/\u4ea4\u6362s[i]\u548cs[j]\n        s[j] = tmp;\n    }\n}\n\n\/*\u52a0\u89e3\u5bc6*\/\nvoid rc4_crypt(unsigned char*s, unsigned char*Data, unsigned long Len)\n{\n    int i = 0, j = 0, t = 0;\n    unsigned long k = 0;\n    unsigned char tmp;\n    for (k = 0; k&lt;Len; k++)\n    {\n        i = (i + 1) % 256;\n        j = (j + s[i]) % 256;\n        tmp = s[i];\n        s[i] = s[j];\/\/\u4ea4\u6362s[x]\u548cs[y]\n        s[j] = tmp;\n        t = (s[i] + s[j]) % 256;\n        Data[k] ^= s[t];\n    }\n}\n\nint main()\n{\n    unsigned char s[256] = { 0 }, s2[256] = { 0 };\/\/S-box\n    char key[256] = { &quot;justfortest&quot; };\n    char pData[512] = &quot;\u8fd9\u662f\u4e00\u4e2a\u7528\u6765\u52a0\u5bc6\u7684\u6570\u636eData&quot;;\n    unsigned long len = strlen(pData);\n    int i;\n\n    printf(&quot;pData=%s\\n&quot;, pData);\n    printf(&quot;key=%s,length=%d\\n\\n&quot;, key, strlen(key));\n    rc4_init(s, (unsigned char*)key, strlen(key));\/\/\u5df2\u7ecf\u5b8c\u6210\u4e86\u521d\u59cb\u5316\n    printf(&quot;\u5b8c\u6210\u5bf9S[i]\u7684\u521d\u59cb\u5316\uff0c\u5982\u4e0b\uff1a\\n\\n&quot;);\n    for (i = 0; i&lt;256; i++)\n    {\n        printf(&quot;%02X&quot;, s[i]);\n        if (i &amp;&amp; (i + 1) % 16 == 0)putchar(&#039;\\n&#039;);\n    }\n    printf(&quot;\\n\\n&quot;);\n    for (i = 0; i&lt;256; i++)\/\/\u7528s2[i]\u6682\u65f6\u4fdd\u7559\u7ecf\u8fc7\u521d\u59cb\u5316\u7684s[i]\uff0c\u5f88\u91cd\u8981\u7684\uff01\uff01\uff01\n    {\n        s2[i] = s[i];\n    }\n    printf(&quot;\u5df2\u7ecf\u521d\u59cb\u5316\uff0c\u73b0\u5728\u52a0\u5bc6:\\n\\n&quot;);\n    rc4_crypt(s, (unsigned char*)pData, len);\/\/\u52a0\u5bc6\n    printf(&quot;pData=%s\\n\\n&quot;, pData);\n    printf(&quot;\u5df2\u7ecf\u52a0\u5bc6\uff0c\u73b0\u5728\u89e3\u5bc6:\\n\\n&quot;);\n    \/\/rc4_init(s,(unsignedchar*)key,strlen(key));\/\/\u521d\u59cb\u5316\u5bc6\u94a5\n    rc4_crypt(s2, (unsigned char*)pData, len);\/\/\u89e3\u5bc6\n    printf(&quot;pData=%s\\n\\n&quot;, pData);\n    return 0;\n}\n\n\/\/\u7a0b\u5e8f\u5b8c<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>RC4 \u4ecb\u7ecd: \u7b80\u4ecb \u5728\u5bc6\u7801\u5b66\u4e2d\uff0cRC4\uff08\u6765\u81eaRivest Cipher 4\u7684\u7f29\u5199\uff09\u662f\u4e00\u79cd\u6d41\u52a0\u5bc6\u7b97\u6cd5\uff0c\u5bc6\u94a5\u957f\u5ea6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-218","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sec"],"_links":{"self":[{"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/posts\/218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/comments?post=218"}],"version-history":[{"count":12,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/posts\/218\/revisions"}],"predecessor-version":[{"id":230,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/posts\/218\/revisions\/230"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/media\/200"}],"wp:attachment":[{"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/media?parent=218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/categories?post=218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.shangwendada.top\/index.php\/wp-json\/wp\/v2\/tags?post=218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}