在Nodejs和Express中实现密码

时间:2013-12-15 04:11:26

标签: python node.js express encryption

所以,我将有一个服务将字段发布到我的应用程序,并且必须执行以下操作:

  

当您的帐户中发生操作时,会传递多个值   在Instant Notification查询字符串中(请参阅URL参数)。   在构建字符串时,我们创建了一个sha1或值的哈希值   通过,你的密钥。结果是cverify参数。上   收到查询字符串参数后,您的系统还必须创建一个   sha1,或传递的值的散列,以及您的密钥。

     

使用cverify评估收到的数据的有效性   我们发送的参数以及系统中产生的值。只有在那里   是两个值之间的完全匹配,你可以肯定   收到的信息未被篡改。

我猜我应该使用crypto模块。但是,不知道如何做其余的事情。这些参数会通过我知道的req.body进来......但是,不确定其余部分。

以下是来自python的示例

import hashlib

##
# Verify cverify from an ipn.
# @param post_params: A dictionary of all POST parameters from the notification
# @return: True if the cverify parameter is valid, false otherwise
def ipnVerification(post_params):
    secret_key = "YOUR SECRET KEY"
    pop = ""
    ipn_fields = []
    for key in post_params.keys():
        if key == "cverify":
            continue
        ipn_fields.append(key)
    ipn_fields.sort()
    for field in ipn_fields:
        pop += post_params[field] + "|"
    pop += secret_key
    return post_params["cverify"] == hashlib.sha1(pop).hexdigest()[:8].upper()

这是我到目前为止所做的:

var secretKey = 'My Secret Key';

module.exports = {
    validateRequest: function(req){
        var params = []
        for (param in req.body) {
            if (param == "cverify")
                continue;
            params.push(param);
        }

        params.sort();
        var pop = "";

        for (param in params) {
            pop += req.body.param + "|";
        }
        pop += secretKey;
        var cverify = req.body.cveryify;

        // do crypto stuff
        console.log(params);
    }
}

1 个答案:

答案 0 :(得分:1)

如果我正确理解了代码:

var secretKey = 'My Secret Key';

module.exports = {
  validateRequest : function(req) {
    /* shorter version of what you have already:
    var keys = Object.keys(req.body)
                .filter(function(key) { return key !== 'cverify'; })
                .sort();

    var pop = keys.map(function(key) {
      return body[key];
    }).join('|') + '|' + secretKey;
    */
    ...

    var sha1 = require('crypto').createHash('sha1');
    sha1.update(pop);
    var digest = sha1.digest('hex').substring(0, 8).toUpperCase();
    return digest === req.body.cverify;
  }
};