Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从十六进制编码的模创建RSA密钥并在node.js中加密_Node.js_Encryption_Rsa - Fatal编程技术网

如何从十六进制编码的模创建RSA密钥并在node.js中加密

如何从十六进制编码的模创建RSA密钥并在node.js中加密,node.js,encryption,rsa,Node.js,Encryption,Rsa,我正在node.js中找到RSA加密的方法,我想处理大数字,所以我使用以下方法: 我要做的就是加密,用模和指数。我不需要解密。不管怎样,我不断地犯错误,但我不知道出了什么问题。有人知道这是怎么回事吗?谢谢 代码 require("node-bignumber"); var nvalue="ad6eb61316ff805e9c94667ab04aa45aa3203eef71ba8c12afb353a5c7f11657e43f5ce4483d4e6eca46af6b3bde4981499014730

我正在node.js中找到RSA加密的方法,我想处理大数字,所以我使用以下方法:

我要做的就是加密,用模和指数。我不需要解密。不管怎样,我不断地犯错误,但我不知道出了什么问题。有人知道这是怎么回事吗?谢谢

代码

require("node-bignumber");
var nvalue="ad6eb61316ff805e9c94667ab04aa45aa3203eef71ba8c12afb353a5c7f11657e43f5ce4483d4e6eca46af6b3bde4981499014730d3b233420bf3ecd3287a2768da8bd401f0abd7a5a137d700f0c9d0574ef7ba91328e9a6b055820d03c98d56943139075d";
var evalue="010001";
var encpw="";
var rsa = new RSAKey;

function encryptMessage() {
    var message = "All your bases are belong to us.";
    rsa.setPublic(evalue, nvalue);
    encpw.value = rsa.encrypt(message);
    console.log(encpw);
}

encryptMessage();
错误

ReferenceError: RSAKey is not defined
    at Object.<anonymous> (c:\Users\win\Desktop\untitled\juntae.js:5:15)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:136:18)
    at node.js:963:3
ReferenceError:未定义RSAKey

在对象处。

您应该能够通过以下方式从模数和公共指数加载RSA公钥:

var rsa = require("node-bignumber");

var n = "ad6eb61316ff805e9c94667ab04aa45aa3203eef71ba8c12afb353a5c7f11657e43f5ce4483d4e6eca46af6b3bde4981499014730d3b233420bf3ecd3287a2768da8bd401f0abd7a5a137d700f0c9d0574ef7ba91328e9a6b055820d03c98d56943139075d";
var e = "010001";
var pub = new rsa.Key();
pub.setPublic(n, e);

var message = "Message";
var encrypted = pub.encrypt(message);

console.log(encrypted);

RSA中的公钥由模数和公钥指数组成,因为在加密过程中需要这两个值。

打包版本的JSBN似乎不包含
RSAKey
。你看到那张照片了吗?无论如何,如果您只想进行RSA加密,那么您应该真正使用内置模块。@ArtjomB。事实上,3天前我从基础薄弱的javascript中加入了Nodejs。我认为lib/rsa/rsa.js上有RSAKey构造函数,但我不知道如何使用它。我把RSAKey从使用指南改成了另一个,但我不知道。。。我很难理解,我不知道他们为什么在模数和指数上使用十六进制值。@ArtjomB。我推荐了一个红色的nodejs api(加密模块),它有一个RSA加密功能。publicEncrypt(公钥、缓冲区)。正确的?但是参数,我不能理解。我认为公钥应该是一对。(mod和exp)但为什么参数只获取一个公钥?缓冲区是要加密的消息。正确的?所以我不知道我该怎么做。。。我找了一整天这个简单的问题…我能问最后一个问题吗。。。我确实复制了您的代码并试图运行它,但返回了“TypeError:无法读取未定义的属性'setPublic'。我想放弃nodejs。我不知道这是怎么回事。。。存在RSAKey.prototype.setPublic=RSASetPublic;然后RSASetPublic就存在了。我不知道出了什么问题。对不起,我忘记了
new
。对于阅读此内容并使用其他库的其他人,您可能需要修改为var n=“00ad63…”一些实现将(正确地)将其视为负数。我没有使用过这个库,我假设它的行为和上面代码的预期一样。@MikeF说得好。节点模块内部的大数字库能够表示负数,但我实际上没有检查它是否使用负数进行计算。在RSA的上下文中,这将是非常奇怪的。无论如何,您还需要检查库是否希望十六进制编码的数字采用大端或小端格式,这意味着“00”可能需要放在模的后面。