Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
作为NodeJS用户,如何使用ruby OpenSSL库进行加密?_Ruby_Node.js_Encryption - Fatal编程技术网

作为NodeJS用户,如何使用ruby OpenSSL库进行加密?

作为NodeJS用户,如何使用ruby OpenSSL库进行加密?,ruby,node.js,encryption,Ruby,Node.js,Encryption,我是节点开发人员,但每隔一段时间我就会玩ERB模板。我真的很喜欢在这些模板中尽可能多地使用ruby,这个想法特别吸引了我的眼球 我有这个配置值,应该加密,但是是纯文本的。程序将按如下方式对其进行解密: var crypto = require('crypto'); var decipher = crypto.createDecipher('aes256', 'e20jhciwjf90u2r9u9ujj'); var decrypted = crypto.update('4ufujj90u19r

我是节点开发人员,但每隔一段时间我就会玩ERB模板。我真的很喜欢在这些模板中尽可能多地使用ruby,这个想法特别吸引了我的眼球

我有这个配置值,应该加密,但是是纯文本的。程序将按如下方式对其进行解密:

var crypto = require('crypto');

var decipher = crypto.createDecipher('aes256', 'e20jhciwjf90u2r9u9ujj');
var decrypted = crypto.update('4ufujj90u19ru90u109u') + crypto.final();
我想知道如何创建一个加密字符串,以便使用ruby对上面的内容进行解密

到目前为止,我已经:

require 'openssl'

cipher = OpenSSL::Cipher::Cipher.new('aes256');
cipher.key= 'e20jhciwjf90u2r9u9ujj'

encrypted = cipher.update('my cat is yellow and very pretty.') + cipher.final
我有两个问题:

  • 我经常在ruby端得到一个
    键长度不够长的错误
  • Ruby输出一堆疯狂的十六进制数,而node似乎总是使用/want
    utf8
  • 我加密/解密安全吗
  • 有没有一种方法可以对这两个API进行全面的翻译/横向工作
  • AES-256使用256位的键,默认情况下ruby使用utf-8编码,因此每个ansi字符的长度为8位。所以密钥字符串必须是32字节
  • 明确使用aes模式(例如aes-256-cbc)
  • 在两侧设置相同的iv(初始向量)
  • 我最终用上述方法成功了。 这是我的密码: 红宝石方面:

    require 'openssl'
    require 'base64'
    cipher = OpenSSL::Cipher.new('aes-256-cbc')
    cipher.encrypt
    cipher.iv = 'a'*16;
    cipher.key = '01234567890123456789012345678901' # should be 32 characters, 32*8=256 bits
    enc = Base64.strict_encode64(cipher.update('01234567890123456789012345678901') + cipher.final)
    puts enc
    
    Javascript方面:

    var encrypted = new Buffer(base64Data, 'base64');
    var crypto = require('crypto');
    var decipher = crypto.createDecipheriv('aes-256-cbc', '01234567890123456789012345678901', 'aaaaaaaaaaaaaaaa');
    var dec = decipher.update(encrypted);
    console.log(Buffer.concat([dec, decipher.final()]));
    
  • AES-256使用256位的键,默认情况下ruby使用utf-8编码,因此每个ansi字符的长度为8位。所以密钥字符串必须是32字节
  • 明确使用aes模式(例如aes-256-cbc)
  • 在两侧设置相同的iv(初始向量)
  • 我最终用上述方法成功了。 这是我的密码: 红宝石方面:

    require 'openssl'
    require 'base64'
    cipher = OpenSSL::Cipher.new('aes-256-cbc')
    cipher.encrypt
    cipher.iv = 'a'*16;
    cipher.key = '01234567890123456789012345678901' # should be 32 characters, 32*8=256 bits
    enc = Base64.strict_encode64(cipher.update('01234567890123456789012345678901') + cipher.final)
    puts enc
    
    Javascript方面:

    var encrypted = new Buffer(base64Data, 'base64');
    var crypto = require('crypto');
    var decipher = crypto.createDecipheriv('aes-256-cbc', '01234567890123456789012345678901', 'aaaaaaaaaaaaaaaa');
    var dec = decipher.update(encrypted);
    console.log(Buffer.concat([dec, decipher.final()]));
    

    静脉注射必须是不可预测的(阅读:随机)。不要使用静态IV,因为这会使密码具有确定性,因此在语义上不安全。观察密文的攻击者可以确定以前何时发送相同的消息前缀。IV不是秘密,所以你可以把它和密文一起发送。通常,它只是在密文前面加上前缀,然后在解密之前切掉。我只是想让我的代码变得简单,但不要把它放在您的产品中environment@AlexWang你知道为什么我可以用一个6个字符的字符串作为Node的键,但是我不能对Ruby做同样的事情吗?Node在你的键后面加上0,使它变成256bits。IV必须是不可预测的(读:random)。不要使用静态IV,因为这会使密码具有确定性,因此在语义上不安全。观察密文的攻击者可以确定以前何时发送相同的消息前缀。IV不是秘密,所以你可以把它和密文一起发送。通常,它只是在密文前面加上前缀,然后在解密之前切掉。我只是想让我的代码变得简单,但不要把它放在您的产品中environment@AlexWang你知道为什么我可以用一个6个字符的字符串作为Node的键,但我不能对Ruby做同样的事情吗?Node将0附加到你的键上,并使其为256位