Klasa Crypto Node.js zwracająca różne wyniki ze zaktualizowaną wersją
Poniższy kod tworzy dane wyjściowe HTML dla przycisku jednokrotnego logowania, który zostaje dodany do strony. W węźle w wersji 0.5.x klucz jest akceptowany przez serwer po kliknięciu przycisku, ale po uaktualnieniu do 0.10.x nie działa i generuje inne wyjście. Bez błędów. Czy zmieniła się klasa kryptograficzna? Uwaga: klucz, adres URL i iv zostały nieznacznie zmienione, aby uniknąć zamieszczania bezpiecznych informacji, ale mają prawidłową długość.
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>')
}