如何在NodeJS中创建加密和解密功能?

时间:2014-03-20 22:25:56

标签: javascript node.js encryption cryptography

我需要在NodeJS应用程序中创建加密和解密功能。任何人都可以帮助并指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

经过一番挖掘,我能够回答我自己的问题...对于缺乏清晰度和细节感到抱歉。对于下一个问题,我们会继续努力。

我已经包含了加密和解密的功能,以及"帮助"用于生成密钥并生成初始化向量的函数。

var crypto = require('crypto');

var encrypt = function encrypt(input, password) {
        var key = generateKey(password);
        var initializationVector = generateInitializationVector(password);

        var data = new Buffer(input.toString(), 'utf8').toString('binary');

        var cipher = crypto.createCipheriv('aes-256-cbc', key, initializationVector.slice(0,16));
        var encrypted = cipher.update(data, 'utf8', 'hex');
        encrypted += cipher.final('hex');   
        var encoded = new Buffer(encrypted, 'binary').toString('base64');

        return encoded;
};

var decrypt = function decrypt(input, password) {
        var key = generateKey(password);
        var initializationVector = generateInitializationVector(password);

        var input = input.replace(/\-/g, '+').replace(/_/g, '/');
        var edata = new Buffer(input, 'base64').toString('binary');

        var decipher = crypto.createDecipheriv('aes-256-cbc', key, initializationVector.slice(0,16));
        var decrypted = decipher.update(edata, 'hex', 'utf8');
        decrypted += decipher.final('utf8');
        var decoded = new Buffer(decrypted, 'binary').toString('utf8');

        return decoded;
};
var generateKey = function generateKey(password) {
    var cryptographicHash = crypto.createHash('md5');
    cryptographicHash.update(password);
    key = cryptographicHash.digest('hex');

    return key;
}
var generateInitializationVector = function generateInitializationVector(password) {
    var cryptographicHash = crypto.createHash('md5');
    cryptographicHash.update(password + key);
    initializationVector = cryptographicHash.digest('hex');

    return initializationVector;
}

var password = 'MyPassword';
var originalStr = 'hello world!';

var encryptedStr = encrypt(originalStr, password);
var decryptedStr = decrypt(encryptedStr, password);

adviner致敬,寻求解决方案的灵感 他的帖子可以在这里:here

我最初通过this post使用dave,但这对于字符长度大于15的输入值不起作用。上面更新的代码适用于任何输入长度。