我想要一个字符串并传递给Rails应用程序,所以我在Nodejs和Ruby中都找到了密码库。
在Nodejs中:
var crypto = require('crypto'),
algorithm = 'aes-256-ctr',
password = 'd6F3Efeqd6F3Efeqd6F3Efeqd6F3Efeq';
function encrypt(text){
var cipher = crypto.createCipher(algorithm,password)
var crypted = cipher.update(text,'ascii',"base64")
crypted += cipher.final("base64");
return crypted;
}结果是:
encrypt("1") //-输出 2g==在Ruby中
def encrypt(des_text)
des = OpenSSL::Cipher::Cipher.new('aes-256-ctr')
des.encrypt
des.key = 'd6F3Efeqd6F3Efeqd6F3Efeqd6F3Efeq'
result = des.update(des_text)
result << des.final
return Base64.encode64 result
end结果是:
encrypt("1") # 输出 1A==所以我用同样的方式和密钥来加密同一个字符串,为什么结果不一样?
发布于 2015-11-26 03:49:32
Crypto.createCipher(算法,密码)和crypto.createCipheriv(算法,密钥,iv)的不同之处在于,密码用于推导密钥和IV。
var crypto = require('crypto'),
algorithm = 'aes-256-ctr',
key = 'd6F3Efeqd6F3Efeqd6F3Efeqd6F3Efeq',
iv = "1234567890123456";
function encrypt(text){
var cipher = crypto.createCipheriv(algorithm,key,iv)
var crypted = cipher.update(text,'utf-8',"base64")
crypted += cipher.final("base64");
return crypted;
}
console.log(encrypt("1")); // return bQ==在Ruby中,如果您没有指定iv,那么它将使用默认的iv。
require 'openssl'
require 'base64'
def encrypt(des_text)
des = OpenSSL::Cipher::Cipher.new('aes-256-ctr')
des.encrypt
des.key = 'd6F3Efeqd6F3Efeqd6F3Efeqd6F3Efeq'
des.iv = "1234567890123456"
result = des.update(des_text)
result << des.final
return Base64.encode64 result
end
p encrypt("1").strip # return bQ==https://stackoverflow.com/questions/33929712
复制相似问题