nodejs:用于加密/解密的节点模块?

时间:2015-03-09 10:03:12

标签: javascript node.js security encryption

我希望网站(A)仅在访问者来自特定其他网站(B)时才能使用。

最初,我想过使用document.referrer,但显然很容易被伪造。猜猜看,我没有其他选择,只能将密钥从网站A传递到网站B.

这两个网站都在node服务器上运行。我已经传递了两个参数(比如说param1 n param2),所以想到这个键,以及两个站点之间共享的一些常见字符串(认为叫做private key)会产生一些站点A上的一些加密代码,将其添加为第三个参数并发送到站点B.

在站点B中,我将解密第三个参数(使用private key)并检查它是否与param1param2匹配,然后允许其他返回{{1 }}。

我之前从未做过这样的事情(安全相关的东西),这种方法是否正确?是否有任何节点模块已经提供这种加密和解密?最后,有关创建私钥的任何建议吗?

1 个答案:

答案 0 :(得分:1)

我使用article nodejs模块编写了crypto如何实现此目的:

aes_encryption.js:

var crypto      = require('crypto'),
    cipher_seed = 'some_random_characters';

var encrypt = function(text) {
    var cipher  = crypto.createCipher('aes-256-cbc', cipher_seed),
        crypted = cipher.update(text, 'utf8', 'hex');

    crypted += cipher.final('hex');

    return crypted;
};

var decrypt = function(text) {
    var decipher  = crypto.createDecipher('aes-256-cbc', cipher_seed),
        decrypted = decipher.update(text, 'hex', 'utf8');

    decrypted += decipher.final('utf8');

    return decrypted;
};

module.exports.encrypt = encrypt;
module.exports.decrypt = decrypt;

用法:

var AES = require('path_to_aes_encryption.js');

var data = {
    name:    'Catalin',
    surname: 'Munteanu',
    address: 'Romania'
};

// Encryption
var encrypted_data = AES.encrypt(JSON.stringify(data));

// Decryption
var decrypted_data = JSON.parse(AES.decrypt(encrypted_data));

如果您打算在一台服务器上进行加密,而在其他服务器上进行解密,请不要忘记使用相同的cipher_seed