{"id":992,"date":"2023-03-12T07:51:18","date_gmt":"2023-03-11T23:51:18","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=992"},"modified":"2023-04-29T13:20:54","modified_gmt":"2023-04-29T05:20:54","slug":"node-rsa-usage","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/12\/node-rsa-usage\/","title":{"rendered":"node-rsa\u4f7f\u7528"},"content":{"rendered":"<p>\u7b80\u5355\u4ecb\u7ecd\u4f7f\u7528node-rsa\u6a21\u5757\u751f\u6210\/\u5bfc\u51fa\u79d8\u94a5\u3001\u52a0\u5bc6\/\u89e3\u5bc6\u3001\u7b7e\u540d\/\u9a8c\u8bc1<\/p>\n<p>Github\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/rzcoder\/node-rsa\">https:\/\/github.com\/rzcoder\/node-rsa<\/a><br \/>\nAPI\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/www.npmjs.com\/package\/node-rsa\">https:\/\/www.npmjs.com\/package\/node-rsa<\/a><\/p>\n<p><!-- more --><\/p>\n<h2>\u57fa\u672c\u4f7f\u7528<\/h2>\n<h3>\u5f15\u5165\u6a21\u5757<\/h3>\n<pre><code>npm install node-rsa<\/code><\/pre>\n<pre><code class=\"language-javascript\">var NodeRSA = require(&#039;node-rsa&#039;);<\/code><\/pre>\n<h3>\u751f\u6210\u53ca\u5bfc\u5165\u5bfc\u51fa\u79d8\u94a5<\/h3>\n<pre><code class=\"language-javascript\">var key = new NodeRSA({b: 512}); \/\/\u751f\u6210512\u4f4d\u79d8\u94a5\nvar pubkey = key.exportKey(&#039;pkcs8-public&#039;); \/\/\u5bfc\u51fa\u516c\u94a5\nvar prikey = key.exportKey(&#039;pkcs8-private&#039;); \/\/\u5bfc\u51fa\u79c1\u94a5\nvar pubKey = new NodeRSA(pubKey, &#039;pkcs8-public&#039;); \/\/\u5bfc\u5165\u516c\u94a5\nvar priKey = new NodeRSA(priKey, &#039;pkcs8-private&#039;); \/\/\u5bfc\u5165\u79c1\u94a5<\/code><\/pre>\n<h3>\u52a0\u5bc6\u89e3\u5bc6<\/h3>\n<p>\u516c\u94a5\u52a0\u5bc6(\u8fd4\u56de\u5bc6\u6587):<\/p>\n<pre><code class=\"language-javascript\">pubKey = new NodeRSA(publicKey, &#039;pkcs8-public&#039;);\nvar encrypted = pubKey.encrypt(buffer, &#039;base64&#039;);<\/code><\/pre>\n<p>\u79c1\u94a5\u89e3\u5bc6(\u8fd4\u56de\u660e\u6587):<\/p>\n<pre><code class=\"language-javascript\">priKey = new NodeRSA(privateKey, &#039;pkcs8-private&#039;);\nvar decrypted = priKey.decrypt(buffer, &#039;utf8&#039;);<\/code><\/pre>\n<h3>\u7b7e\u540d\u9a8c\u8bc1<\/h3>\n<p>\u79c1\u94a5\u7b7e\u540d(\u8fd4\u56de\u7b7e\u540d):<\/p>\n<pre><code class=\"language-javascript\">priKey = new NodeRSA(privateKey, &#039;pkcs8-private&#039;);\nvar signature = priKey.sign(buffer);<\/code><\/pre>\n<p>\u516c\u94a5\u9a8c\u8bc1(\u8fd4\u56detrue\u6216false):<\/p>\n<pre><code class=\"language-javascript\">pubKey = new NodeRSA(publicKey, &#039;pkcs8-public&#039;);\nvar flag = pubKey.verify(buffer, signature);<\/code><\/pre>\n<h2>node-rsa\u52a0\u5bc6\uff0cjava\u89e3\u5bc6\u8c03\u8bd5<\/h2>\n<p>\u7528NODE RSA JS\u52a0\u89e3\u5bc6\u6b63\u5e38\uff0c\u7528Java\u5de5\u5177\u7c7b\u52a0\u89e3\u5bc6\u6b63\u5e38\u3002\u4f46\u662f\u4f7f\u7528node\u52a0\u5bc6\u7684\u4e32Java\u4e0d\u80fd\u89e3\u5bc6\uff0c\u62a5\u9519\u5982\u4e0b\uff1a<\/p>\n<pre><code>Exception in thread &quot;main&quot; javax.crypto.BadPaddingException: Decryption error\n    at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380)\n    at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291)\n    at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363)\n    at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)\n    at javax.crypto.Cipher.doFinal(Cipher.java:2223)\n    at com.cjk.mqtt.RSAUtils.decryptByPrivateKey(RSAUtils.java:161)\n    at com.cjk.mqtt.Main.main(Main.java:14)\n    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n    at java.lang.reflect.Method.invoke(Method.java:497)\n    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)<\/code><\/pre>\n<p>\u539f\u56e0\uff1anode\u4e2d\u9ed8\u8ba4\u7684\u662f<code>DEFAULT_ENCRYPTION_SCHEME = &#039;pkcs1_oaep&#039;<\/code>\uff0c\u800cJava\u4e2d\u9ed8\u8ba4\u7684\u662fpkcs1\u3002<br \/>\n\u89e3\u51b3\uff1a\u624b\u52a8\u8bbe\u7f6e\uff1a<code>pubKey.setOptions({encryptionScheme: &#039;pkcs1&#039;})<\/code><\/p>\n<pre><code class=\"language-javascript\">var NodeRSA = require(&#039;node-rsa&#039;);\n\npubKey = new NodeRSA(&#039;MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgiifXEil1vEIUOA1dHDqm\/OJtaZ7+u0uSA+ZkjhXNR4saXuMYrOZs7KjydkYAnFUmRKURSRIwaRUvYUSonZopcFThskE9hmx9i6ouDC6O\/GhZ\/t2pjsmVS09NEIZwYWIAtMiHmWx6sBP+SLm6P8eF5\/08PZsn+mLYi5ayv5BCao7o\/M1qX0JKDHQID29mQ\/oX9K7Cfk59HA2IBOXfmDJnoaYFGjUEikxiYIY3fFEiIi+MR6XnYixhQocLL5dnUZ4snD6GrugsKpbqwdjtqqXtrtzj4GZlgZVl\/uniEbS+oOqIvbZhOyER\/wOZe4KiIwBWkkHfQox6vvj1\/MmXv9NUwIDAQAB&#039;,&#039;pkcs8-public&#039;);\npubKey.setOptions({encryptionScheme: &#039;pkcs1&#039;})  \/\/\u9002\u914dJava\u89e3\u5bc6\nvar encrypted = pubKey.encrypt(&#039;{&quot;name&quot;:&quot;Joe.Ye&quot;,&quot;homepage&quot;:&quot;http:\/\/www.appblog.cn&quot;&#039;, &#039;base64&#039;);\nconsole.log(encrypted)\n\npriKey = new NodeRSA(&#039;MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCCKJ9cSKXW8QhQ4DV0cOqb84m1pnv67S5ID5mSOFc1Hixpe4xis5mzsqPJ2RgCcVSZEpRFJEjBpFS9hRKidmilwVOGyQT2GbH2Lqi4MLo78aFn+3amOyZVLT00QhnBhYgC0yIeZbHqwE\/5Iubo\/x4Xn\/Tw9myf6YtiLlrK\/kEJqjuj8zWpfQkoMdAgPb2ZD+hf0rsJ+Tn0cDYgE5d+YMmehpgUaNQSKTGJghjd8USIiL4xHpediLGFChwsvl2dRniycPoau6CwqlurB2O2qpe2u3OPgZmWBlWX+6eIRtL6g6oi9tmE7IRH\/A5l7gqIjAFaSQd9CjHq++PX8yZe\/01TAgMBAAECggEABF2Ear3tAfZ3hu7eHBelZrGWTsdUpSfLQ5NyXRsSoa9vYeJI5Q6M+x\/kqmJjkcFnSvL6kg8TeZsfVHPgGh7Kh7SiLoUTa4WVGGKcOgE4XcZO2YPviMe3E2g\/Az+sSXdHBoE6Rba3bt4gUITBJdNYmQY+Ws6I+hwFFrfjR6ebWs2UeG3c+W\/8HHsYZ8Z0cvQ1kwqvjqE5jrYVJ2AHTY3gkYNFildc1XMOExVrlGJdoKoY3gd\/D9pV5qmiK8pA3TNbHM7JKLlRg6MJUgVkfV68swrQs4AKs4IzpqjOi3vJCFOo5npilqZEjFW1OjK8xRdHeZVHGeCOJo8XUd4R0+psUQKBgQDOT41HG1Q3n9DHiNz9ssT6AAUKRYF9cRBKFbpEcCdfOj6tC4kfJRDWWyB5vzxIKD1VFNfPCYKqba4EEEIrb+fkppG0NjWHdImC4DopOKN28U2SNTDtZ6NXWeHzphwEjJN6RwrGTnvzV5PUH3+IDP0ymgwUoo90qpLOO81pVHZkxwKBgQChgchNNcOK5eFHnczOpMKZq\/G57oniQbpRbpuiEgv6a0mosS8AiWkCLqxRV1FJW+aaPvEq9Ewrx4QQBooYnhYZCRa3ZB5puHQgpa5ryVtxoHLNSIZ1QowWmdM2\/owdYfpLGM1vkabvNY9pkptaq4md91tiS\/X19X4QJAWg23OvFQKBgH3kT0pfo9FZhTXtDyUETGxdTLYK2cxpDM6YWZRfd7cFPK+thVvq605SRwvjpO5HF73uPQ5KOGC1EuXJ4gbNf4yoE+sK1Tk15J9nIjZ7KExxTKt2J8gGYMbxww5Bg4FHIssPxMRjqgFApKVhHxovCuYw2ERTOgSv\/Ws5VMv8TU6LAoGAD1m7hQMoK8p\/qAPqlHV6fYqnNgnjFxsyL005A6V9d\/a8kIkOs5lb3rY68JxBAJz4hQ6Yc4G2v6598dv9Qiu8Y\/LGMvYUIe5DM1ssAdiolVsvri1Hglup3vgN6Ds3bA+E76BS3ljUqgXINLuXgn2tXdNF30ji\/tavfa8+zbQuAaUCgYEAtV4GK4nq8t7acKZzLSy5qMIJVyftP5UmhyXE6Rb3rjb0tA23SdbaWCTyffZ\/n+QYS8pfpNTLMjjxgL3vp03EkJcdudRHjFwMcmrha2RL0yiIc3BCD2JuOWbvGKyGqCquvxhqBrxuBCK8zXzCSMqnYh57bIViayCyXdGreu0V0AI=&#039;,&#039;pkcs8-private&#039;);\npriKey.setOptions({encryptionScheme: &#039;pkcs1&#039;})  \/\/\u9002\u914dJava\u52a0\u5bc6\nvar decrypted = priKey.decrypt(encrypted, &#039;utf8&#039;);\nconsole.log(decrypted)<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u7b80\u5355\u4ecb\u7ecd\u4f7f\u7528node-rsa\u6a21\u5757\u751f\u6210\/\u5bfc\u51fa\u79d8\u94a5\u3001\u52a0\u5bc6\/\u89e3\u5bc6\u3001\u7b7e\u540d\/\u9a8c\u8bc1 Github\uff1ahttps:\/\/gith [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34],"tags":[108],"class_list":["post-992","post","type-post","status-publish","format-standard","hentry","category-node","tag-rsa"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=992"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/992\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}