【问题标题】:Node.js Crypto class returning different results with updated versionNode.js Crypto 类使用更新的版本返回不同的结果
【发布时间】:2013-11-27 16:26:10
【问题描述】:

以下代码为添加到页面的单点登录按钮生成 HTML 输出。在节点版本 0.5.x 中,服务器在单击按钮时接受密钥,但升级到 0.10.x 后它不起作用并产生不同的输出。没有错误。加密类有变化吗?请注意,密钥、url 和 iv 已稍作更改以避免发布安全信息,但长度正确。

var util = require('util');
var crypto = require('crypto');
var fs = require('fs');
var dateFormat = require('dateformat');


var AESCrypt = {};


AESCrypt.encrypt = function(cryptkey, iv, cleardata) {

    var encipher = crypto.createCipheriv('aes-256-cbc', cryptkey, iv),
        encryptdata  = encipher.update(cleardata);


    encryptdata += encipher.final('binary');

    encode_encryptdata = new Buffer(encryptdata, 'binary').toString('hex');
    return encode_encryptdata;
}


function getKey(email){
  var now = new Date();
  var key = new Buffer("F4553ECE8E0039675E8DA176D23BD82D455BB6272B574FDD6185296432CE1AD9",'hex'),
    iv  = new Buffer("D95897EA52A8A0C8DF231C8F2DBE59A7",'hex'),
    key_bin = key.toString('binary'),
    iv_bin = iv.toString('binary'),
    text = new Buffer('mystring','ascii'),
    text_bin = text.toString('binary');

  var enc  = AESCrypt.encrypt(key_bin, iv_bin, text_bin);

  var page = '<form method="POST" action="https://somedomain.com/AES.aspx"><input type="hidden" name="key" value="'+enc+'"/><input type="hidden" name="ouid" value="1"/><input type="submit" value="Log ine"/></form>';

  return page;
}

if(process.argv[2]) {
    email = process.argv[2];
    console.log(getKey(email));
}
else{
    console.log('Something may be wrong with your email address>')
}

【问题讨论】:

  • 你试过Buffer.concat而不是+=吗?我回答了另一个问题,+= 无法正常工作。
  • 你好,你试过了吗?
  • 抱歉,这行得通

标签: node.js cryptography aes


【解决方案1】:

似乎 - 至少对于更高版本的 NodeJS - 需要 Buffer.concat() 而不是 += 运算符。

【讨论】:

    【解决方案2】:

    工作代码:

    var crypto = require('crypto');
    var ecr = function(str)
    {
        var cipher = crypto.createCipher('aes-256-cbc', 'passphase');
        var cryptedBuffers = [cipher.update(new Buffer(str))];
        cryptedBuffers.push(cipher.final());
        var crypted = Buffer.concat(cryptedBuffers);
        return crypted;
    };
    var dcr = function(str)
    {
        var dcipher = crypto.createDecipher('aes-256-cbc', 'passphase');
    
        var dcryptedBuffers = [dcipher.update(new Buffer(str))];
        dcryptedBuffers.push(dcipher.final());
        var dcrypted = Buffer.concat(dcryptedBuffers)
            .toString('utf8');
        return dcrypted;
    };
    
    console.log(dcr(ecr('hello test')));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 2020-05-23
      • 2015-03-29
      相关资源
      最近更新 更多