gpt4 book ai didi

ruby-on-rails - Nodejs 和 Ruby 中的加密

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:49 29 4
gpt4 key购买 nike

我想要加密一个字符串并传递给 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==

那么我用同样的方式和 key 加密同一个字符串,为什么结果不一样?

最佳答案

crypto.createCipher(algorithm, password) 和 crypto.createCipheriv(algorithm, key, iv) 之间的区别在于,password 用于派生 key 和 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==

关于ruby-on-rails - Nodejs 和 Ruby 中的加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929712/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com