首页 > 解决方案 > 我如何发送比较散列在快递?服务器到客户端

问题描述

当客户端要求服务器生成哈希并授权访问文件时,我需要回答,我如何确认哈希等于消息,使用 node.js 并表示:

const express = require("express");
const bodyParser = require("body-parser");
const request = require("request");
const sha1 = require('sha1');
const app = express();
app.use(express.static("public"));
app.use(bodyParser.urlencoded({extended: true}));
app.get('/', function(request, response) {
  var x1 = request.query.x1; 
  var x2 = request.query.x2; 
  var x3 = request.query.x3; 
  var x4 = 654321; 
  var hash = sha1(x2+x3+x4)
});
app.listen(process.env.PORT || 3000, function() {
  console.log("Server is running in port 3000!");
});

*

标签: javascriptnode.jsexpressserverclient

解决方案


您可以使用该crypto模块生成和解码哈希。这是一个例子。

const resizedIV = Buffer.allocUnsafe(16)
app.get('/', function(request, response) {

    const key = crypto
      .createHash("sha256")
      .update('secret-key')//this should be a secret key
      .digest()

   const cipher = crypto.createCipheriv("aes256", key, resizedIV)

   for (var prop in req.query) {
    if (req.query.hasOwnProperty(prop)) {
    cipher.update(req.query[prop], "binary", "hex")
    }
   }
    const hash = cipher.final("hex")
    res.send(hash)
});

然后你可以像这样解码它

app.get('/decode', function(req, res) {
    const key = crypto
        .createHash("sha256")
        .update('secret-key')
        .digest()

     const decipher = crypto.createDecipheriv("aes256", key, resizedIV),


        decipher.update(req.query.hash, "hex", "binary")


       const decoded = decipher.final("binary")

       res.send(decoded)

})

推荐阅读