Articles of rsa

如何将大hex值转换为nodejs中的整数?

有很大的hex值: var Hex = "ad6eb61316ff805e9c94667ab04aa45aa3203eef71ba8c12afb353a5c7f11657e43f5ce4483d4e6eca46af6b3bde4981499014730d3b233420bf3ecd3287a2768da8bd401f0abd7a5a137d700f0c9d0574ef7ba91328e9a6b055820d03c98d56943139075d"; 如何将它转换为node.js中的大整数? 我试图search,但我发现是 var integer = parseInt(Hex, 16); 但是,如果我把hex大的值,这是行不通的。 我认为。 结果是, 1.1564501846672726e+243 我怎样才能返回正常的大整数? 我想在RSAencryption中使用这个值作为模数 。 其实我不知道要不要转换。

安全签名algorithm的兼容性

经过一番研究之后,似乎有人build议使用带有PSS填充的RSA,因为它的安全属性已经很好了。 问题在于签名algorithm很难兼容 ,特别是对于这样的需求。 我想实现的是至less在以下环境中进行签名和validation: 牡丹 OpenSSL的 encryption+ Node.js(使用OpenSSL) 在PolarSSL和其他软件上兼容也许会很有趣。 在node.jsencryption页面中有一个关于创build和validation签名的例子。 这很好,但我需要与Botan EMSAx(SHA256)兼容,并且真的认为签名应该用RSA-PSS之类的安全软件来填充。 节点示例页面仅显示'RSA-SHA256'但没有使用填充。 PSS填充可以通过使用OpenSSL来实现: openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 \ -sign rsa.key -out data.txt.sha256 data.txt 我的testing代码看起来像这样: var s = crypto.createSign('RSA-SHA256'); var key = fs.readFileSync('rsa.key').toString(); s.update(message); var signature = s.sign(key, 'base64'); 但它为相同的input产生相同的输出,这不是我想要的,而且显然与我使用Botan的C ++实现不兼容。 如果无法以最小的努力达到兼容性,对于selectalgorithm的任何build议,我可能会努力尝试联系这些encryption库的开发者,看看是否有一个algorithm的共识来获得作为事实上的标准实施。 (是的,我知道这似乎是绝望。)是否有这样的持续努力?

NodeJS exec使用来自进程的二进制文件

我正在尝试编写一个函数,它会使用本地openssl为我做一些RSA繁重的工作,而不是使用js RSA库。 目标是 从文件读取二进制数据 在节点进程中使用JS做一些处理,产生一个包含二进制数据的缓冲区 将缓冲区写入exec命令的stdinstream RSAencryption/解密数据并将其写入标准输出stream 获取input数据返回到JS进程中的缓冲区进行进一步处理 Node中的subprocess模块有一个exec命令,但是我看不到如何将input传送给进程并将其传回到进程中。 基本上我想执行以下types的命令,但不必依赖写入文件(没有检查openssl的确切语法) cat the_binary_file.data | openssl -encrypt -inkey key_file.pem -certin > the_output_stream 我可以通过编写一个临时文件来做到这一点,但是如果可能的话,我想避免它。 产生一个subprocess允许我访问stdin / out,但没有findexec的这个function。 我在这里起草的方式是否有一个干净的方式来做到这一点? 是否有一些使用openssl的替代方式,例如openssl lib的一些本地绑定,这将允许我这样做,而不依赖于命令行?

使用SHA256进行签名与使用RSA-SHA256进行签名之间的区别

我使用node.js玩数字签名 出于testing目的,我创build了一些XML数据的数字签名,首先使用SHA256,然后使用RSA-SHA256。 令我感到困惑的是, 两种签名方法都创build了完全相同的签名 。 两个签名是相同的。 如果它们是相同的,那么为什么两种不同的方法(SHA256与RSA-SHA256)? 我包含下面的代码: var crypto = require('crypto'), path = require('path'), fs = require('fs'), pkey_path = path.normalize('private_key.pem'), pkey = ''; function testSignature(pkey) { var sign1 = crypto.createSign('RSA-SHA256'), sign2 = crypto.createSign('SHA256'); fs.ReadStream('some_document.xml') .on('data', function (d) { sign1.update(d); sign2.update(d); }) .on('end', function () { var s1 = sign1.sign(pkey, "base64"), s2 = sign2.sign(pkey, "base64"); […]

使用libssh从消息中提取SSH公钥

我在节点应用程序中使用node-libssh作为libssh的一个很好的绑定,并且可以很容易地模拟一个ssh服务器。 不过,我需要从传入的SSH会话中提取公钥。 我需要一个string化的密钥版本,以便以后在数据库查询中使用,并且它必须与您在id_rsa.pub文件中find的格式相同。 我已经能够将其缩小到需要一种方法来在libssh ssh_key到char数组之间进行转换。 它简单到使用ssh_key pubKey = ssh_message_auth_pubkey(message); 获得ssh_key版本,但是在libssh中似乎没有任何方法可以将ssh_key转换为任何可以传回到我的nodejs进程的其他格式。 我预见了这样的解决scheme: ssh_key authKey = ssh_message_auth_pubkey(m->message); const char *pubKey = ssh_key_to_char(authKey); if (pubKey) instance->Set(NanSymbol("pubKey"), v8::String::New(pubKey)); 但是,自然不是这样简单,因为没有方法ssh_key_to_char存在,我真的很感激任何指针在这里。

从JavaScript创build一个PEM文件看起来不同于Java导致签名validation失败

我试图validation与公钥RSA签名的SHA1,我已经写了下面的Java代码完美的作品,但是JavaScript无法validation它何时使用相同的模数和由crypto或ursa创build的指数。 虽然如果我用它对Java创build的Pem文件它的作品。 任何想法或build议的Java代码转换为JavaScript的最佳方式? JAVA: import java.math.BigInteger; import java.security.KeyFactory; import java.security.Signature; import java.security.interfaces.RSAPublicKey; import java.security.spec.RSAPublicKeySpec; import java.util.Base64; public class Verify { static public Boolean verifySignature(String modulus, String exponent , String encodedMsg, String encodedSignature, String signatureAlgorithm) throws Exception { try { RSAPublicKeySpec senderPublicKeySpec = new RSAPublicKeySpec( new BigInteger(modulus, 16), new BigInteger(exponent, 16) ); RSAPublicKey rsaPublicKey = (RSAPublicKey) […]

使用JavaScript中的PFX文件的RSA私钥创buildJWT(NodeJS)

我试图从PFX文件创build一个RSA私钥,我可以使用它来创build一个JWT。 我不太了解事物的安全性,所以很难find合适的库来使用。 我有一个提供的PFX,我需要使用它来encryptionJSON有效载荷(在一个Node应用程序中),然后将其发送到第三方(Java)后端服务器进行解密。 任何示例代码来做到这一点将不胜感激。

JS:使用RSA解密文件

我必须通过JavaScript解密一个RSAencryption文件(Node.js,更具体)。 我的问题是,它被保存为二进制文件,我发现只有一个库能够从二进制文件导入密钥:node-rsa。 不幸的是,我试图使用它时出现错误。 Uncaught Error: Cannot find module './libs/rsa.js' 现在我查了一下,文件肯定在那里。 我希望你能帮我find一个替代scheme,或者解决这个错误。 谢谢。

节点js – 使用由SmartCard HSM和NodeRSA模块生成的密钥

我使用模块pkcs11js来生成具有智能卡HSM的RSA密钥,如示例#3所示 。 var publicKeyTemplate = [ { type: pkcs11js.CKA_CLASS, value: pkcs11js.CKO_PUBLIC_KEY }, { type: pkcs11js.CKA_TOKEN, value: false }, { type: pkcs11js.CKA_LABEL, value: "My RSA Public Key" }, { type: pkcs11js.CKA_PUBLIC_EXPONENT, value: new Buffer([1, 0, 1]) }, { type: pkcs11js.CKA_MODULUS_BITS, value: 2048 }, { type: pkcs11js.CKA_VERIFY, value: true } ]; var privateKeyTemplate = [ { type: […]

使用node-jose,我如何解密刚encryption的数据?

我正在尝试使用node-jose实现简单的JOSE encrypt和decrypt函数。 我的代码如下(使用节点8.2.1写) const { JWE } = require('node-jose'); const jose = (publicKey, privateKey) => { async function encrypt(raw) { if (!raw) throw new Error('Missing raw data.') const buffer = new Buffer(JSON.stringify(raw)); return JWE.createEncrypt(publicKey).update(buffer).final(); } async function decrypt(encrypted) { if (!encrypted) throw new Error('Missing encrypted data.') const buffer = new Buffer(JSON.stringify(encrypted)); return JWE.createDecrypt(privateKey).decrypt(buffer); } return […]