Tag: 密码学

如何从PKCS#12文件中提取私钥,以便与nodeJS OAuth一起使用

我有一个包含私钥的p12文件,用于签署我的OAuth请求。 但是,OAuth NodeJS lib( ciaranj / node-oauth )不会将此格式作为input。 我尝试了许多OpenSsl选项(PKCS#8或传统PEM格式)从PKCS#12密钥库中提取我的私钥,但我无法获得OAuth头部签名以被接受。 我应该使用哪些OpenSsl选项来创build可用的PEM文件,如下所示: var privateKey = fs.readFileSync("privateKey.pem").toString('ascii'); var oauth= new OAuth(null, null, consumerKey, privateKey, "1.0", null, "RSA-SHA1"); 我不是OpenSsl的专家,所以任何提示都会非常受欢迎。 PS:或者,由于OAuth lib使用NodeJSencryption标记API,如果您知道使用PKCS#12文件进行签名的方式,则可以节省我的时间。

NodeJSencryption:重新使用密码对象来提高性能

我想要nodejs和一个encryption的MongoDB数据库。 我担心表演。 考虑下面的用例: 我有一个encryption的数据库,我从中检索encryptionstring列表(例如名称)[_encrypted_name_1,_encrypted_name_2,…] 我想解密列表中的所有元素 由于我担心表演,所以我做了一些testing来搞清楚。 我观察到,encryption/解密很多小string比encryption/解密一个非常大的string要慢很多。 考虑下面的例子: var crypto = require('crypto'), _ = require('lodash'), encryptedStringArray = [], decryptedStringArray = [], encryptedLongString, NB_ITERATION = 100000, stringArray = [], longString = '', myString = 'Your Name'; function encrypt(text){ var cipher = crypto.createCipher('aes-256-cbc', 'd6F3Efeq'); var crypted = cipher.update(text, 'utf8', 'hex'); crypted += cipher.final('hex'); return crypted; } function […]

crypto createHMAC输出根据nodejs版本的不同而不同

在升级我的节点版本时,我遇到了encryption模块问题。 创build的HMAC取决于节点的版本。 您会在下面find重现问题的代码。 如果我将密钥编码为BASE64(或任何),则HMAC不依赖于node.js版本。 如果我把它编码为二进制,如果我改变我的node.js版本,HMAC是不同的。 [编辑]根据为什么crypto.createHash在新版本中返回不同的输出? 调用update函数时添加了编码 代码片段 "use strict"; const crypto = require('crypto'); console.log(process.version); let key = '5ece799aa73a7a8e687876f8e0eabe2e200b967ef5728d845f72fc9ea27dbcd90cd4e06e8bc90d823ac8a54ce91f68ca37fc2e7bbf3f5ef9d82b4c6b938f1936'; let _key64 = (new Buffer(key, 'hex')).toString('base64'); console.log("B64 KEY: "+crypto.createHmac('sha512', _key64).update("hey", "binary").digest('hex').toUpperCase()); let _keyBin = (new Buffer(key, 'hex')).toString('binary'); console.log("BIN KEY: "+crypto.createHmac('sha512', _keyBin).update("hey", "binary").digest('hex').toUpperCase()); 输出是以下两个版本的node.js v5.6.0 B64 KEY: 0DC11C737E575B17DD575042F8F372E3D63A86C3B56C06FB74C9B0AB8E96A5FC8A2DC33667280DC5B306C93AA3DECBAF0D8EDE56F3666C11BFC25A70CFC027D0 BIN KEY: E5A9F813D9AA64A6791BEA91035553FFC730DBE635D0CE7AC722C0195DFDD77A969323FDDFB4E5054E59073DAE9B9BF00CFF73CF20F2FACEE01F79F25E7B9303 v8.1.4 B64 KEY: 0DC11C737E575B17DD575042F8F372E3D63A86C3B56C06FB74C9B0AB8E96A5FC8A2DC33667280DC5B306C93AA3DECBAF0D8EDE56F3666C11BFC25A70CFC027D0 BIN KEY: […]

有没有办法从node.js调用Google Keyczar?

我需要在我的应用程序中使用node.js生成一些HMAC服务器端。 Node在其encryption类中提供了HMACfunction: http://nodejs.org/api/crypto.html#crypto_class_hmac 然而,keyczar还有其他一些function,特别是关键的轮换和pipe理。 有没有人find了从node.js使用keyczar的方法,或者在node.jsencryption之上实现了一个密钥滚动策略?

NodeJS,RSA,这是安全的?

这是一个用公钥encryption并用私钥解密的安全方式吗? 如果不是,我需要添加什么? AES或类似的通过? var ursa = require('ursa'); var fs = require('fs'); // create a pair of keys (a private key contains both keys…) var keys = ursa.generatePrivateKey(); console.log('keys:', keys); // reconstitute the private key from a base64 encoding var privPem = keys.toPrivatePem('base64'); console.log('privPem:', privPem); var priv = ursa.createPrivateKey(privPem, '', 'base64'); // make a public key, […]

Nodejs使用encryption错误解密错误的最终块长度

我使用这个代码来隐藏/解密string值 var crypto = require('crypto'); function encrypt(text){ var cipher = crypto.createCipher('aes-256-cbc','secret key'); var encrypted = cipher.update(text.toString(),'utf8','hex') + cipher.final('hex'); return encrypted; } function decrypt(text){ var decipher = crypto.createDecipher('aes-256-cbc','secret key'); var decrypted = decipher.update(text.toString(),'hex','utf8') + decipher.final('utf8'); return decrypted ; } module.exports.encrypt = encrypt; module.exports.decrypt = decrypt; 当我试图解密的东西,不encryption例如解密('testing'),它会抛出以下错误: crypto.js:292 var ret = this._binding.final(); ^ TypeError: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong […]

CryptoSwiftencryption的数据与Node.js不同

我使用CryptoSwiftencryption一些数据,然后使用Node.jsencryption相同的数据。 但结果不一样。 我问作者,他说这不是一个错误。 我不知道我在哪里犯了一个错误。 这里是我如何使用CryptoSwift和Node.js的图片: 密码algorithm:aes-256-cfb 键:32字节1 iv:16个字节0 CryptoSwift:开发分支0.1.1 Node.js:LTS 4.2.3 由CryptoSwiftencryption的数据 由Node.jsencryption的数据4.2.3 这里是swift代码: func testAES() { let key = [UInt8](count: 32, repeatedValue: 1) let iv = [UInt8](count: 16, repeatedValue: 0) print(key) print(iv) let aes256cfb = try! AES(key: key, iv: iv, blockMode: .CFB) let en1 = try! aes256cfb.encrypt([0x5, 0x77], padding: nil) print(en1.map({ i in String(format: […]

RSAencryption之间的c + +和node.js

我必须通过networking发送一些encryption的数据(websocket) 我使用下面的node.js模块生成了一个密钥对: https://github.com/juliangruber/keypair 我的公钥像这样: —–BEGIN RSA PUBLIC KEY—– MIIBCgKCAQEAlUiMDQsBgj5P/T86w/eg9MXUj8M4WMVihP8YzmDxMqCFb7D+w4N/1XcxWxQT …. Wo+SRCsr6npfp1ctDhMtkXIeNT4lKf3qUGhP5tbx/TreaNF/d8zCeinGR/KeBGadMwIDAQAB —–END RSA PUBLIC KEY—– 在C ++代码中,我生成了一个RSA类,通过char * const char rsaKey1[] = "—–BEGIN RSA PUBLIC KEY—–\n" "MIIBCgKCAQEAlUiMDQsBgj5P/T86w/eg9MXUj8M4WMVihP8YzmDxMqCFb7D+w4N/1XcxWxQT\n" …. "Wo+SRCsr6npfp1ctDhMtkXIeNT4lKf3qUGhP5tbx/TreaNF/d8zCeinGR/KeBGadMwIDAQAB\n" "—–END RSA PUBLIC KEY—–\n"; BIO* bio = BIO_new_mem_buf( rsaKey1, strlen(rsaKey1)); m_rsaPubKey = PEM_read_bio_RSAPublicKey(bio, NULL, NULL, NULL); usigned m_rsaPubKey,我可以用encryption的数据生成一个unsigned char的std :: vector std::vector<u8> Rsa::encrypt(std::string & msg) { […]

在nodejs中创buildRSA令牌

我正在尝试使用encryption对REST API进行身份validation。 首先,我需要调用API来获得一个encryptionKey和一个timestamp 。 encryptionKey采用Base 64格式。 然后我需要使用密钥创build一个RSAToken ,并使用password + "|" + timestamp最后encryption密码 password + "|" + timestamp 。 这是一些使用pythonvalidationAPI的示例代码 key, timestamp = get_encryption_key() decoded_key = key.decode('base64') rsa_key = RSA.importKey(decoded_key) encrypted = rsa_key.encrypt(password + '|' + str(timestamp), 'x') encrypted_password = encrypted[0] 和 import base64 from Crypto.PublicKey import RSA r = requests.get(my_url, headers=headers) myData = r.json() decoded […]

使用node.js解密mcrypt编码的文本

我使用PHP的mcrypt编码了Blowfish的文本: $td = mcrypt_module_open ('blowfish', '', 'cfb', ''); $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND); mcrypt_generic_init ($td, "somekey", $iv); $crypttext = mcrypt_generic ($td, "sometext"); mcrypt_generic_deinit ($td); $res = base64_encode($iv.$crypttext); 当试图用Node的encryption库解码数据时,我得到垃圾输出。 var crypto = require("crypto"), ivAndCiphertext = "base64-encoded-ciphertext", iv, cipherText, ivSize = 8, res= ""; ivAndCiphertext = new Buffer(ivAndCiphertext, 'base64'); iv = new Buffer(ivSize); cipherText = new […]