Articles of rsa

在node.js中validationphp证书

我有以下的PHP函数validation证书: <?php function raven_check_sig($data, $sig) { $key_path = '/path/to/pubkey.crt'; $key_crt = file_get_contents($key_path); $key = openssl_get_publickey($key_crt); $result = openssl_verify($data, base64_decode($sig), $key); openssl_free_key($key); if ($result == 1) { return TRUE; } else { return FALSE; } } 我正在将我的应用程序移植到node.js,但我无法实现如何实现此function。 我努力了: function checkSignature(data, sig, kid) { var keyPath = '/path/to/pubkey.crt'; var key = fs.readFileSync(keyPath); var verifier = crypto.createVerify('RSA-SHA256'); verifier.update(data); […]

Node.js内置encryption:RSA解密

我正在使用node.js 0.10.12。 我生成了2048位的RSA密钥对,我在本地存储为.pem文件。 使用节点附带的内置“encryption”库,我试图解密用上面提到的公共RSA密钥encryption的数据块。 我已经得到了这么多: var privateKey = fs.readFileSync('private.pem', { encoding: 'utf8' }); var cryptOpt = { key: /* PEM encoded private key */ privKey }; var cred = crypto.createCredentials( cryptOpt ); var rsa = crypto.createDecipheriv( 'rsa', cred.?key-in-binary-format?, cred.?initialization vector? ); 我不知道我在这里正确的道路上。 •我不知道密钥在“cred”中以二进制forms存储在哪里。 •我不知道要在初始化向量参数中放置什么。 数据将使用iOS上的标准库进行encryption,据我所知,在使用RSA进行encryption时,不允许用户指定初始化向量。 我一直无法从node.jsencryption文档中提取许多知识或理解: http : //nodejs.org/api/crypto.html

node.js rsaencryption/解密

我有以下的C#代码: // incoming data – MemoryStream memoryStream RSACryptoServiceProvider cryptoServiceProvider1 = new RSACryptoServiceProvider(); cryptoServiceProvider1.FromXmlString("<RSAKeyValue><Modulus>…</Modulus><Exponent>AQAB</Exponent><P>…</P><Q>…</Q><DP>…</DP><DQ>…</DQ><InverseQ>…</InverseQ><D>…</D></RSAKeyValue>"); cryptoServiceProvider1.PersistKeyInCsp = true; RijndaelManaged rijndaelManaged = new RijndaelManaged(); rijndaelManaged.KeySize = 256; rijndaelManaged.BlockSize = 128; rijndaelManaged.Mode = CipherMode.CBC; byte[] numArray3 = new byte[128]; byte[] numArray4 = new byte[16]; // numArray3 & numArray4 – filled with come data; byte[] rgbKey = cryptoServiceProvider1.Decrypt(numArray3, false); ICryptoTransform […]

Node.js函数使用Open SSL生成RSA密钥

我使用Node.js作为服务器端语言,我想为任何在我的网站上注册的用户生成一个RSA密钥对。 我正在使用一个称为密钥对的模块。 对于小尺寸的密钥来说,它工作的很好,但是当我生成大小为2048的密钥时,需要很长的时间来执行它,所以我想使用Node的child_process直接从Node.js使用Open SSL,如下面的脚本所述: var cp = require('child_process') , assert = require('assert'); var privateKey, publicKey; publicKey = ''; cp.exec('openssl genrsa 2048', function(err, stdout, stderr) { assert.ok(!err); privateKey = stdout; console.log(privateKey); makepub = cp.spawn('openssl', ['rsa', '-pubout']); makepub.on('exit', function(code) { assert.equal(code, 0); console.log(publicKey); }); makepub.stdout.on('data', function(data) { publicKey += data; }); makepub.stdout.setEncoding('ascii'); makepub.stdin.write(privateKey); makepub.stdin.end(); }); 这是工作和密钥对生成比Node.js密钥对模块更快,所以我遇到的问题是,我不明白这个代码(如果它正在写服务器端的文件,并从他们的阅读键? ),我想把这个脚本转换成一个返回一个JSON或一个数组作为结果的函数来保存公钥和私钥。 […]

使用RSA enc / dec节点伪造程序包错误

我在我的meteor.jsnetworking应用程序上使用node-forge npm。 我想根据这个例子对一些纯文本进行RSAencryption: https : //github.com/digitalbazaar/forge#rsa 当我想要解密密文时,问题就到了,我想要找回明文,说明encryption块是无效的。 下面的例子,我必须encryptionstring的字节,所有这一切,但我不明白为什么它解密失败? 任何猜测? rsaEncrypt:function(pubPem,privPem,plainText){ console.log(plainText); var str = plainText; var bytes = []; for (var i = 0; i < str.length; ++i) { bytes.push(str.charCodeAt(i)); } console.log("BAJTOVI:"); console.log(bytes); var publicKey = pki.publicKeyFromPem(pubPem); console.log(publicKey); var encrypted = publicKey.encrypt(bytes); console.log("Encryption: "); console.log(encrypted); var privateKey = pki.privateKeyFromPem(privPem); var decrypted = privateKey.decrypt(encrypted); console.log("Decryption: "); […]

如何从hex编码的模数中创buildRSA密钥并在node.js中encryption

我find了在node.js RSAencryption的方式,我想处理大数字,所以我使用这个: https : //github.com/eschnou/node-bumber 我要做的只是encryption,模数和指数。 我不必做解密。 无论如何,我有一个错误,但我不知道什么是错的。 谁能知道这是什么错误? 谢谢。 码 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 […]

使用通过heroku工头从.env文件加载的RSA私钥签名JWT时出错

我有一个运行在Heroku上的node.js web服务器,它将签名和validationJSON Web Tokens。 我已经生成了一个RSA公钥和私钥,它们看起来像这样: private_key.pem —–BEGIN RSA PRIVATE KEY—– MIIEowIBAAKCAQEAz7pZEypvrFJCDshsbOamj9bmy/dXnUOyCo5b3xSvvTNIoFAC 5ePXozCD/5Byih1JB6ZYE6OceEW6oArkPzZOl8bFBlqV9k30oerMtVei18+CfF/u FLWlJXs9FvXrRTKtsL43OmpLCH3LdzK9/+ZqhEx/TShp3JudUWuRW8ALqrBd8QW5 CWJHYozYVaIpFzwJ9KW6fJ9GpZfcToCOquLWo8iINnAovXmvcAtdmzgIqoucD988 f9oerll/CubJLy2rOiyeRvsAYouoefoyQZWN8IYPlnb5IB6Z7qnVL6rZz44dAjVw S3uARW3lxpfeZn3TN7wpPkBssGBF0OSEHNrXVwIDAQABAoIBAC8HHCVnpRKZKNVZ 8JoS+cB0wZmJrK8w5TzYj9oIP+UQmC+bDZzoISiT0j5ogFXeXWs68JO5pbHg72hO LvBUpiRcXryag3rYmTqTArdHWNmM5BiuSyMrIHFE3ka1dAcdew8ZcT1rVQNeH1Mk DLnDe3fqLaPVM2o7XLlTJfxklP+WN6xWhBgDVgEawneo5svdgblYhg3u7cb4fsHg cAf0sCYraVuqcUHa/AUVOx7n5U39x3ShOvOQvFlWEDD6uN4Yg/twW2UyfFDWD57p 2oPIEf06wOOu2XylPQwEU9w92Fr4yNqk0xksn8sOjbRyEPZncpDICsPTo1nsrz+R 0AcwWUkCgYEA7DfUujbbg6WrfSOyS718kTeej0Il5z19JYu11g+Sis4r8RWbT92q weCp4dCGCpJrsPbs4+s4hT42sKfjUcUy5ZCGTDturQNbhH0RGxPp1KUTrytzdph8 4mqpCVYcN1AmLCCA0WtFqJ53taWuipcLtU48ZRC4jHI+stUSNCtaE8UCgYEA4R+6 x5mUjOWAK8GSTgHMWa72KqaxR/osYwmMPtHtjIFm1aOElQaXbGlZKd3dR5Tnw/4R 8hO/gJc+eQeaPGhri0IVmG66JNTw8q0M0Qd+l0OrarYS5c09XzjAUdGOatstsaNE rhgRG90HvVYt0cHyKRa/C4+CnEBod/EoS/UnhGsCgYB5wT1Qzj3PWXFPCzs3du/i Gf0Mclf/HN6In76WG2i5SxOzLCPlwqflTtvBnS25/Uas7FmmEPQNGcguvhqZZz+Y vCm82VVusDBX1e8fOeBozr2aqJbXJjoYqkl+mnfoutMyI37Ccrxw8V1ar4+Lt9c9 GJpgrYGyQqC2pMTBRyci0QKBgHxc9uXE5ddgAQorCROm0qjIipzNMSo9/b9ISv15 Iu13nsNubZOV7JirKeKC+fbNP6t585fzaNs0sgJSPNYaKS7o9t0abiJisCifiHEA 3uHZNBzjMFVaqAiuZS/NwAsvwXJca1hxWyI1XE0wCmfR6GDie+96/AAtZIi95DDx 4T65AoGBAIE5LSP+glxJEd8jU/qc80D/dXf6icURyYDGARw8mziAgw6fL9cwbmqb IGDxP1ke2FA8OZ0W4VybRi9UcprenvADYpPb+CPZv4gxGoDFg0Bb/JcFUKL29hC1 steX0GR4TKYNeXLC+zz7Qr0DzhpqRswSyHG5GckkIRdgHx4l/Uza —–END RSA PRIVATE KEY—– public_key.pem —–BEGIN PUBLIC KEY—– MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz7pZEypvrFJCDshsbOam j9bmy/dXnUOyCo5b3xSvvTNIoFAC5ePXozCD/5Byih1JB6ZYE6OceEW6oArkPzZO l8bFBlqV9k30oerMtVei18+CfF/uFLWlJXs9FvXrRTKtsL43OmpLCH3LdzK9/+Zq hEx/TShp3JudUWuRW8ALqrBd8QW5CWJHYozYVaIpFzwJ9KW6fJ9GpZfcToCOquLW o8iINnAovXmvcAtdmzgIqoucD988f9oerll/CubJLy2rOiyeRvsAYouoefoyQZWN 8IYPlnb5IB6Z7qnVL6rZz44dAjVwS3uARW3lxpfeZn3TN7wpPkBssGBF0OSEHNrX VwIDAQAB —–END PUBLIC KEY—– (注意这些是为这个例子生成的,并没有在任何现场系统中使用) 当通过fs模块加载密钥(PEM文件)并传递到jsonwebtoken库时 […]

将Nodejs签名散列函数转换为Python

我试图连接到只有Nodejs文档的API,但是我需要使用Python。 官方文档声明hhtp请求需要像这样签名,只给出这个代码: var pk = "…. your private key …."; var data = JSON.strigify( {some JSON object} ); var signature = crypto.createSign('RSA-SHA256').update(data).sign(pk, 'base64'); 到目前为止,我被封锁在那里: from Crypto.PublicKey import RSA from Crypto.Signature import PKCS1_v1_5 from Crypto.Hash import SHA256 import base64 private_key_loc='D:\\api_key' BODY={ some JSON } data=json.dumps(BODY) def sign_data(private_key_loc, data): key = open(private_key_loc, "r").read() rsakey = RSA.importKey(key,passphrase='c9dweQ393Ftg') signer […]

如何将大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的共识来获得作为事实上的标准实施。 (是的,我知道这似乎是绝望。)是否有这样的持续努力?