Tag: openssl

Nodejs createCipher vs createCipheriv

我目前正在尝试使用createCipher来encryption数据,我已经阅读了Node API文档, build议不要使用 createCipher 。 crypto.createCipher()的实现使用OpenSSL函数EVP_BytesToKey以摘要algorithm设置为MD5的方式派生密钥,一次迭代并且不加盐。 盐的缺乏使字典攻击成为可能,因为相同的密码总是会产生相同的密钥。 低迭代次数和非密码安全散列algorithm允许密码被快速testing。 根据OpenSSLbuild议使用pbkdf2而不是EVP_BytesToKey,build议开发人员使用crypto.pbkdf2()自己派生密钥和IV,并使用crypto.createCipheriv()创buildCipher对象。 createCipher仍然是一个可行的和安全的方式来encryption静止的数据? 该方法是否应该被视为弃用? 信息充分的攻击者是否可以解密数据? 应该使用createCipheriv的解决scheme总是优于createCipher ? 任何其他细节或build议表示赞赏。

错误:node.js没有用opensslencryption支持编译

我是node.js的新手,但一直试图让一个简单的websockets服务器运行。 当我尝试运行示例服务器时,出现错误:“错误:node.js未使用openssl crypto支持进行编译”。 当我运行./configure时,我得到: 检查程序g ++或c ++:/ usr / bin / g ++ 检查程序cpp:/ usr / bin / cpp 检查程序ar:/ usr / bin / ar 检查程序ranlib:/ usr / bin / ranlib 检查g ++:好的 检查程序gcc或cc:/ usr / bin / gcc 检查程序ar:/ usr / bin / ar 检查程序ranlib:/ usr / bin / ranlib 检查gcc:好的 检查库dl:是的 检查openssl:是的 检查库util:是的 […]

我如何在节点中将套接字升级到TLS?

我试图写一个FTP服务器在支持TLS明确的AUTH的节点。 在这种模式下,客户端发送一个AUTH TLS命令给服务器,服务器响应一个确认,提示客户端开始协商安全连接。 我使用这个代码来升级连接: https : //github.com/andris9/rai/blob/master/lib/starttls.js 。 我已经通过使用net.Server编写了一个简单的echo服务器,然后使用starttls函数来立即将套接字升级到一个安全的连接来validation。 使用openssl s_client连接到此testing服务器按预期工作。 但是,当我尝试使用支持具有显式authentication的TLS的FTP客户端连接到我的testingFTP服务器时,以下exception由createSecurePair返回的对象引发: [Error: 140735236446560:error:1408A0B7:SSL routines:SSL3_GET_CLIENT_HELLO:no ciphers specified:../deps/openssl/openssl/ssl/s3_srvr.c:1009: ] 实际上,我已经指定了密码( createSecurePair传递了一个options字典,其ciphers设置为'RC4-SHA:AES128-SHA:AES256-SHA')。 我已经用数据包嗅探了连接,而且似乎发生的事情是服务器响应客户端的AUTH TLS命令后,客户端和服务器之间有一个简短的交换,我认为这是(失败的)TLS协商。 但是我对TLS进一步调查还不够了解。 我应该如何去调查这个错误的来源? 我正在运行节点0.8.1,和0.6.19有相同的问题。

什么是openssl的“aes-256-cfb”的Java名称?

我正在使用openssl的aes-256-cfbalgorithm(来自NodeJS的encryption模块)。 虽然NodeJS和Java代码都能成功地对数据进行encryption和解密,但密文是不同的,即使iv,密钥和明文都是相同的。 openssl/NodeJS cipherText: 05c2aad7bac42ed0846e9a52ce73df9ff9d7ff914feea49fed27d55ad690782a43107914c1b307ec92753227728c95b8e59c546d Java cipherText: 05C2AAD7BAC42ED084739340D47CEC9F03D8E94AC7B1E11A56A6654F76AD2C8076BCA162303E39B44D043732E98FDD28C52D 我猜测openssl的aes-256-cfb转换为Java的AES/CFB/NoPadding 。 密文共享相同的最初的9个字节,这是奇怪的 – 我会期望他们共享前16个字节,如果在使用的共同模式有所不同。 (我希望“共同模式”是CFB / CBC / CTR /等的统称)。 Java的AES/CFB/NoPadding是OpenSSL的aes-256-cfb的正确翻译吗? 是否存在共同的前九个字节意味着Java的AES/CFB/NoPadding至less使用AES256,而不是AES128? 如果是这样,还有什么可能解释不同的密文? testing用例如下: OpenSSL的/的NodeJS: var assert = require('assert'); var crypto = require('crypto'); describe('crypto', function() { it('should work', function () { var plainText = new Buffer('a secret plainText which has more than sixteen bytes'); var key […]

在JavaScript环境中的安全ID

我想用JavaScript生成一个安全的随机string。 关于JavaScript的安全性没有太多的东西,因为它通常用在客户端 – 在这种情况下,我在服务器端使用Node.js。 我可以创build一个for循环,每次在string中添加一个随机字符 – 但是有没有任何库,函数或其他任何可以使用npm安装的,使用类似SSL安全性的代码,encryption或类似的东西? 另外,请回答各种选项 – 这将是最有用的。 Stackoverflow似乎认为有另一个类似于这个的答案 。 但我不同意。 这个问题问: 有没有更优雅的方式? – 到现有的一段代码。 我的问题比较宽泛,对于JavaScript中没有任何随机string生成知识的人可能会有所帮助。 而且,这个问题可以吸引更广泛的答案,给出许多不同的方法,可以比较。

如何在NodeJS中使用openssl-wrapper生成一个RSA密钥?

我正在使用openssl-wrapper ,一个nodejs包。 很容易定制参数! 但是我得到一个错误,我不能让代码正常工作。 实施的代码: Q.fcall(function caKey() { var params = { des3: true, passout: 'pass:1234567890', out: key, '1024': false }; console.log("caKey", dataFolder, params); return openssl.qExec('genrsa', params); }).then(function debugOutput(data) { // onFullfill console.log("done", data); }) .catch(function (err) { // get err console.error(err); }); 我得到这个错误: caKey D:/certs-dev { '1024': false, des3: true, passout: 'pass:1234567890', out: 'D:/certs-dev/ca/ca.key' […]

用AESEngine和PKCS7填充对bouncycastle的PaddedBufferedBlockCipher的等效密码是什么?

我想用nodejs解密AES-256encryption的string。 我正在使用encryption模块。 该string使用Bouncy城​​堡java库encryption。 在Java中,密码使用: PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding()); nodejs的crypto模块使用openssl的密码列表来初始化它,如: var decipher = crypto.createDecipher('aes-256-cbc',key); 我应该使用哪种algorithm? 以下是可供select的algorithm列表: -bash-4.1$ openssl list-cipher-algorithms|grep AES-256 AES-256-CBC AES-256-CFB AES-256-CFB1 AES-256-CFB8 AES-256-CTR AES-256-ECB AES-256-OFB AES-256-XTS AES256 => AES-256-CBC aes256 => AES-256-CBC

在使用node-gyp构build时,无法将nodeJS本机C ++插件链接到与节点(0.10.18)静态绑定的OpenSSL

我读过这个: https : //github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL ,但由于某种原因,它不适合我。 当我试图要求从节点的插件时,我得到“未定义的符号:SHA1”。 这是我的代码( src/sha_export.cc ): #include <node.h> #include <node_buffer.h> #include <v8.h> #include <openssl/sha.h> using namespace v8; Handle<Value> Sha1(const Arguments& args) { HandleScope scope; if (args.Length() < 1) { ThrowException(Exception::TypeError(String::New("Wrong number of arguments"))); return scope.Close(Undefined()); } unsigned char*msg = (unsigned char*) node::Buffer::Data(args[0]->ToObject()); size_t msglen = node::Buffer::Length(args[0]->ToObject()); unsigned char dgst[20]; SHA1(msg, msglen, dgst); […]

你怎么能得到一个密钥和证书对在https中使用?

我正在尝试在Node.js中使用https模块。 代码如下: var options = { key : <key comes here>, cert : <key comes here> }; https.createServer(options, app).listen(app.get('port'));

如果node.js编译时没有使用openssl,可以在node.js上使用Socket.io吗?

我正在使用Express和Socket.io在embedded式sheeva主板(运行在busybox Linux上的node.js 0.10.12)上运行node.js项目。 由于这是embedded式的,所有东西都是用稀疏的选项构build的,没有安装encryption的东西(node.js被编译–without-openssl)。 该服务器将在局域网上使用,不会传输或接收任何敏感信息,因此不需要encryption。 当我用node运行这个脚本时: var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(3000); 节点失败,输出如下: tls.js:67 throw new Error('node.js not compiled with openssl crypto support.'); Error: node.js not compiled with openssl crypto support. at tls.js:67:9 at NativeModule.compile (node.js:892:5) at NativeModule.require (node.js:861:18) at https.js:22:11 at NativeModule.compile (node.js:892:5) at Function.NativeModule.require (node.js:861:18) at […]