【问题标题】:nodejs: node module for encryption/decryption? [closed]nodejs:用于加密/解密的节点模块? [关闭]
【发布时间】:2015-03-09 10:03:12
【问题描述】:

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

最初,我想使用document.referrer,但显然它很容易被伪造。猜猜,除了将密钥从网站 A 传递到网站 B 之外,我别无选择。

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

在站点 B,我将解密第三个参数(使用 private key)并检查它是否匹配 param1 和 param2,然后允许通过,否则返回 401。

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

【问题讨论】:

  • crypto 已内置,并提供加密、散列等功能。

标签: javascript node.js security encryption


【解决方案1】:

我写了一个article 来说明如何使用crypto nodejs 模块来实现这一点:

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。

【讨论】:

    猜你喜欢
    • 2018-02-26
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2018-07-31
    相关资源
    最近更新 更多