javascript - 我如何发送比较散列在快递?服务器到客户端
问题描述
当客户端要求服务器生成哈希并授权访问文件时,我需要回答,我如何确认哈希等于消息,使用 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!");
});
*
解决方案
您可以使用该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)
})
推荐阅读
- css - 当我改变它们工作的顺序时,怎么会?
- python-3.x - 查找一个句子是否与医学术语有关
- jquery - 如何使“primeng-turbo”表响应功能与“jquery datatable”响应功能相同?
- rocket-chip - 使用 CONFIG=DefaultSmallConfig 合成“module Rocket”
- wildfly - 如何为 Wildfly 10.1 启用 HTTP2
- python - 缺少的属性不会被 Python 支持的 IDE 捕获
- angular - 离子加载控制器关闭不起作用
- microservices - 为什么不为 DTO 创建一个 git 子模块,它将在多个微服务之间共享以避免代码重复?
- android - “import android.view.View”中的视图和视图是什么
- python - 每当我在管理员中添加新用户时,如何在 django 管理页面中添加 Id_card_number 输入字段?