2013-11-27 50 views
1

以下代码为单点登录按钮生成HTML输出,并将其添加到页面中。在节点版本0.5.x中,服务器在按钮单击时接受密钥,但在升级到0.10.x后,密钥不起作用并产生不同的输出。没有错误。加密类是否改变了?请注意,密钥,网址和iv已被稍微更改以避免发布安全信息,但长度正确。Node.js Crypto类以更新的版本返回不同的结果

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>') 
} 
+1

您是否尝试过'Buffer.concat'代替+ =?我回答了另一个问题,“+ ='无法正常工作。 –

+0

你好,你已经试过了吗? –

+0

对不起,是的,这工作 – wdhilliard

回答

3

看来 - 至少在以后的版本中的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'))); 
相关问题