首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nodejs和Ruby中的密码

Nodejs和Ruby中的密码
EN

Stack Overflow用户
提问于 2015-11-26 02:35:54
回答 1查看 1K关注 0票数 2

我想要一个字符串并传递给Rails应用程序,所以我在Nodejs和Ruby中都找到了密码库。

在Nodejs中:

代码语言:javascript
运行
复制
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;
}

结果是:

代码语言:javascript
运行
复制
encrypt("1") //-输出 2g==

在Ruby中

代码语言:javascript
运行
复制
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

结果是:

代码语言:javascript
运行
复制
encrypt("1")  # 输出 1A==

所以我用同样的方式和密钥来加密同一个字符串,为什么结果不一样?

EN

Stack Overflow用户

回答已采纳

发布于 2015-11-26 03:49:32

Crypto.createCipher(算法,密码)和crypto.createCipheriv(算法,密钥,iv)的不同之处在于,密码用于推导密钥和IV。

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
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==
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33929712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档