【JSON2WEB】16 login.html 登录密码加密传输

【JSON2WEB】系列目录

【JSON2WEB】01 WEB管理信息系统架构设计

【JSON2WEB】02 JSON2WEB初步UI设计

【JSON2WEB】03 go的模板包html/template的使用

【JSON2WEB】04 amis低代码前端框架介绍

【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成

【JSON2WEB】06 JSON2WEB前端框架搭建

【JSON2WEB】07 Amis可视化设计器CRUD增删改查

【JSON2WEB】08 Amis的事件和校验

【JSON2WEB】09 Amis-editor的代码移植到json2web

【JSON2WEB】10 基于 Amis 做个登录页面login.html

【JSON2WEB】11 基于 Amis 角色功能权限设置页面

【JSON2WEB】 12基于Amis-admin的动态导航菜单树

【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器

【JSON2WEB】14 基于Amis的CRUD开发30分钟速成

【JSON2WEB】15 银河麒麟操作系统下部署JSON2WEB


登录密码加密传输最直接的好处是防止密码在传输过程中被窃取和破解,保障用户账户安全。
防止网络嗅探窃取密码: 在网络传输过程中,数据可能会经过多个网络节点,黑客可利用网络嗅探工具,在公共网络(如咖啡馆、机场的免费 Wi-Fi )监听数据包。若密码以明文传输,嗅探到数据包就等于获取了密码。而加密后,传输的是密文,嗅探到也无法得知真实密码。比如,在一个存在安全隐患的公共 Wi-Fi 环境中,用户登录银行账户时,若密码未加密传输,黑客一旦嗅探到相关数据包,就能获取密码,进而盗刷用户资金;若密码加密传输,黑客得到的只是乱码,无法实施盗窃行为。
抵御中间人攻击篡改密码: 中间人攻击者会拦截通信双方的数据,并可能篡改传输内容。对于登录密码,如果没有加密,攻击者可以将正确密码篡改成自己设定的内容,导致用户账号被攻击者掌控。加密传输时,攻击者虽能拦截数据,但无法解密修改,即使修改密文,接收方也无法正常解密验证,能及时发现异常,保障登录过程安全。 例如,在电商平台登录场景中,攻击者若能篡改未加密的登录密码,就可冒充用户进行购物操作,给用户造成经济损失,而加密传输能有效避免此类情况发生。

在 JSON2WEB 系统中实现步骤如下:

1 MD5 加密函数 Javascript 脚本 md5.min.js

从网上找的 md5.min.js 全部脚本如下:

!function(n){"use strict";function d(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function f(n,t,r,e,o,u){return d((u=d(d(t,n),d(e,u)))<<o|u>>>32-o,r)}function l(n,t,r,e,o,u,c){return f(t&r|~t&e,n,t,o,u,c)}function g(n,t,r,e,o,u,c){return f(t&e|r&~e,n,t,o,u,c)}function v(n,t,r,e,o,u,c){return f(t^r^e,n,t,o,u,c)}function m(n,t,r,e,o,u,c){return f(r^(t|~e),n,t,o,u,c)}function c(n,t){var r,e,o,u;n[t>>5]|=128<<t%32,n[14+(t+64>>>9<<4)]=t;for(var c=1732584193,f=-271733879,i=-1732584194,a=271733878,h=0;h<n.length;h+=16)c=l(r=c,e=f,o=i,u=a,n[h],7,-680876936),a=l(a,c,f,i,n[h+1],12,-389564586),i=l(i,a,c,f,n[h+2],17,606105819),f=l(f,i,a,c,n[h+3],22,-1044525330),c=l(c,f,i,a,n[h+4],7,-176418897),a=l(a,c,f,i,n[h+5],12,1200080426),i=l(i,a,c,f,n[h+6],17,-1473231341),f=l(f,i,a,c,n[h+7],22,-45705983),c=l(c,f,i,a,n[h+8],7,1770035416),a=l(a,c,f,i,n[h+9],12,-1958414417),i=l(i,a,c,f,n[h+10],17,-42063),f=l(f,i,a,c,n[h+11],22,-1990404162),c=l(c,f,i,a,n[h+12],7,1804603682),a=l(a,c,f,i,n[h+13],12,-40341101),i=l(i,a,c,f,n[h+14],17,-1502002290),c=g(c,f=l(f,i,a,c,n[h+15],22,1236535329),i,a,n[h+1],5,-165796510),a=g(a,c,f,i,n[h+6],9,-1069501632),i=g(i,a,c,f,n[h+11],14,643717713),f=g(f,i,a,c,n[h],20,-373897302),c=g(c,f,i,a,n[h+5],5,-701558691),a=g(a,c,f,i,n[h+10],9,38016083),i=g(i,a,c,f,n[h+15],14,-660478335),f=g(f,i,a,c,n[h+4],20,-405537848),c=g(c,f,i,a,n[h+9],5,568446438),a=g(a,c,f,i,n[h+14],9,-1019803690),i=g(i,a,c,f,n[h+3],14,-187363961),f=g(f,i,a,c,n[h+8],20,1163531501),c=g(c,f,i,a,n[h+13],5,-1444681467),a=g(a,c,f,i,n[h+2],9,-51403784),i=g(i,a,c,f,n[h+7],14,1735328473),c=v(c,f=g(f,i,a,c,n[h+12],20,-1926607734),i,a,n[h+5],4,-378558),a=v(a,c,f,i,n[h+8],11,-2022574463),i=v(i,a,c,f,n[h+11],16,1839030562),f=v(f,i,a,c,n[h+14],23,-35309556),c=v(c,f,i,a,n[h+1],4,-1530992060),a=v(a,c,f,i,n[h+4],11,1272893353),i=v(i,a,c,f,n[h+7],16,-155497632),f=v(f,i,a,c,n[h+10],23,-1094730640),c=v(c,f,i,a,n[h+13],4,681279174),a=v(a,c,f,i,n[h],11,-358537222),i=v(i,a,c,f,n[h+3],16,-722521979),f=v(f,i,a,c,n[h+6],23,76029189),c=v(c,f,i,a,n[h+9],4,-640364487),a=v(a,c,f,i,n[h+12],11,-421815835),i=v(i,a,c,f,n[h+15],16,530742520),c=m(c,f=v(f,i,a,c,n[h+2],23,-995338651),i,a,n[h],6,-198630844),a=m(a,c,f,i,n[h+7],10,1126891415),i=m(i,a,c,f,n[h+14],15,-1416354905),f=m(f,i,a,c,n[h+5],21,-57434055),c=m(c,f,i,a,n[h+12],6,1700485571),a=m(a,c,f,i,n[h+3],10,-1894986606),i=m(i,a,c,f,n[h+10],15,-1051523),f=m(f,i,a,c,n[h+1],21,-2054922799),c=m(c,f,i,a,n[h+8],6,1873313359),a=m(a,c,f,i,n[h+15],10,-30611744),i=m(i,a,c,f,n[h+6],15,-1560198380),f=m(f,i,a,c,n[h+13],21,1309151649),c=m(c,f,i,a,n[h+4],6,-145523070),a=m(a,c,f,i,n[h+11],10,-1120210379),i=m(i,a,c,f,n[h+2],15,718787259),f=m(f,i,a,c,n[h+9],21,-343485551),c=d(c,r),f=d(f,e),i=d(i,o),a=d(a,u);return[c,f,i,a]}function i(n){for(var t="",r=32*n.length,e=0;e<r;e+=8)t+=String.fromCharCode(n[e>>5]>>>e%32&255);return t}function a(n){var t=[];for(t[(n.length>>2)-1]=void 0,e=0;e<t.length;e+=1)t[e]=0;for(var r=8*n.length,e=0;e<r;e+=8)t[e>>5]|=(255&n.charCodeAt(e/8))<<e%32;return t}function e(n){for(var t,r="0123456789abcdef",e="",o=0;o<n.length;o+=1)t=n.charCodeAt(o),e+=r.charAt(t>>>4&15)+r.charAt(15&t);return e}function r(n){return unescape(encodeURIComponent(n))}function o(n){return i(c(a(n=r(n)),8*n.length))}function u(n,t){return function(n,t){var r,e=a(n),o=[],u=[];for(o[15]=u[15]=void 0,16<e.length&&(e=c(e,8*n.length)),r=0;r<16;r+=1)o[r]=909522486^e[r],u[r]=1549556828^e[r];return t=c(o.concat(a(t)),512+8*t.length),i(c(u.concat(t),640))}(r(n),r(t))}function t(n,t,r){return t?r?u(t,n):e(u(t,n)):r?o(n):e(o(n))}"function"==typeof define&&define.amd?define(function(){return t}):"object"==typeof module&&module.exports?module.exports=t:n.md5=t}(this);
//# sourceMappingURL=md5.min.js.map

2 login.html 文件引入 md5.min.js

login.html 引入 md5.min.js 代码片段如下:

<body><div id="root" class="app-wrapper"></div><script src="/sdk/sdk.js"></script><script src="/public/md5.min.js"></script> <!-- md5() 加密 --><script src="/config.js" type="text/javascript"></script> <!-- httpIP --><script type="text/javascript">

3 登录表单 api 增加 requestAdaptor 请求适配器

{type: 'form',title: '登录 JSON2WEB',mode: 'horizontal',api: {// index.html 也要同步修改IP , httpIP的定义在config.js// url: 'http://192.168.1.117:5217' + '/token/generate-token?userid=$userId&passwd=$passWd',url: httpIP + ':5217/token/generate-token?userid=$userId&passwd=$passWd',method: 'get', requestAdaptor: function (api,context) {                        let psword = md5(api.query.passwd).toUpperCase();   // 加密            api.url = httpIP + ':5217/token/generate-token?userid=' + api.query.userid + '&passwd=' + psword;// console.log(api);return api;},               adaptor: function (payload) {console.log(payload);if (payload.status === 0) {localStorage.setItem('userName', payload.userName);localStorage.setItem('token', payload.data.token);let rows = JSON.stringify(payload.data.rows)// console.log('rows',rows);localStorage.setItem('rows', rows);// localStorage.clear(); location.href = '/login.html';return payload;}}},

其中核心代码:

requestAdaptor: function (api,context) {                        let psword = md5(api.query.passwd).toUpperCase();   // 加密            api.url = httpIP + ':5217/token/generate-token?userid=' + api.query.userid + '&passwd=' + psword;// console.log(api);return api;},      

请求适配器取出明文密码,md5加密后,在拼接 url 最后 return api ;
login.html的全部代码如下:

<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8" /><title>JSON2WEB4amis</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><link rel="stylesheet" href="/sdk/sdk.css" /><link rel="stylesheet" href="/sdk/helper.css" /><link rel="stylesheet" href="/sdk/iconfont.css" /><!-- 这是默认主题所需的,如果是其他主题则不需要 --><!-- 从 1.1.0 开始 sdk.css 将不支持 IE 11,如果要支持 IE11 请引用这个 css,并把前面那个删了 --><!-- <link rel="stylesheet" href="sdk-ie11.css" /> --><!-- 不过 amis 开发团队几乎没测试过 IE 11 下的效果,所以可能有细节功能用不了,如果发现请报 issue --><style>html,body,.app-wrapper {position: relative;width: 100%;height: 100%;margin: 0;padding: 0;}</style>
</head><body><div id="root" class="app-wrapper"></div><script src="/sdk/sdk.js"></script><script src="/public/md5.min.js"></script> <!-- md5() 加密 --><script src="/config.js" type="text/javascript"></script> <!-- httpIP --><script type="text/javascript">(function () {let amis = amisRequire('amis/embed');// 通过替换下面这个配置来生成不同页面let amisJSON = {type: 'page',title: '',body: [{type: "grid",columns: [{body: [],md: 3},{body: [{type: 'form',title: '登录 JSON2WEB',mode: 'horizontal',api: {// index.html 也要同步修改IP , httpIP的定义在config.js// url: 'http://192.168.1.117:5217' + '/token/generate-token?userid=$userId&passwd=$passWd',url: httpIP + ':5217/token/generate-token?userid=$userId&passwd=$passWd',method: 'get', requestAdaptor: function (api,context) {                        let psword = md5(api.query.passwd).toUpperCase();   // 加密            api.url = httpIP + ':5217/token/generate-token?userid=' + api.query.userid + '&passwd=' + psword;// console.log(api);return api;},               adaptor: function (payload) {console.log(payload);if (payload.status === 0) {localStorage.setItem('userName', payload.userName);localStorage.setItem('token', payload.data.token);let rows = JSON.stringify(payload.data.rows)// console.log('rows',rows);localStorage.setItem('rows', rows);// localStorage.clear(); location.href = '/login.html';return payload;}}},redirect: '/index.html',body: [{label: '用户ID:',type: 'input-text', "required": true,name: 'userId'},{label: '密 码:',type: 'input-password', "required": true,name: 'passWd'}],submitText:"登录"}],md: 6},{body: [],md: 3}]},]};let amisScoped = amis.embed('#root', amisJSON);})();</script>
</body></html>

4 后端密码验证同步修改

// 用户ID及密码验证
func uidPwdIsValid(uid_pwd map[string]string) int {// sSql := "select 5217 as valid from s_user where p_id = '" + uid_pwd["Userid"] + "' and s_passw = md5_32('" + uid_pwd["Passwd"] + "')"sSql := "select 5217 as valid from s_user where p_id = '" + uid_pwd["Userid"] + "' and s_passw = '" + uid_pwd["Passwd"] + "'"result := Icrud.SelectData(sSql)// fmt.Println(sSql)if strings.Index(result, "5217") > 0 {return 1}return 401
}

登录成功后先不跳转到 index.html,
查看一下请求标头:
在这里插入图片描述
请求负载:
在这里插入图片描述
可以看到密码已加密。


本文完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/77421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络起源

互联网的起源和发展是一个充满创新、突破和变革的历程&#xff0c;从20世纪60年代到1989年&#xff0c;这段时期为互联网的诞生和普及奠定了坚实的基础。让我们详细回顾这一段激动人心的历史。 计算机的发展与ARPANET的建立&#xff08;20世纪60年代&#xff09; 互联网的诞生…

洛谷P1824进击的奶牛简单二分

题目如下 代码如下 谢谢观看

如何建立高效的会议机制

建立高效的会议机制需做到&#xff1a;明确会议目标、制定并提前分发议程、控制会议时长、确保有效沟通与反馈、及时跟进执行情况。其中&#xff0c;明确会议目标是核心关键&#xff0c;它直接决定了会议的方向与效率。只有明确目标&#xff0c;会议才不会偏离初衷&#xff0c;…

开源AI大模型AI智能名片S2B2C商城小程序:科技浪潮下的商业新引擎

摘要&#xff1a; 本文聚焦于科技迅猛发展背景下&#xff0c;开源AI大模型、AI智能名片与S2B2C商城小程序的融合应用。通过分析元宇宙、人工智能、区块链、5G等前沿科技带来的商业变革&#xff0c;阐述开源AI大模型AI智能名片S2B2C商城小程序在整合资源、优化服务、提升用户体验…

基于大模型构建金融客服的技术调研

OpenAI-SB api接口 https://openai-sb.com/ ChatGPT与Knowledge Graph (知识图谱)分享交流 https://www.bilibili.com/video/BV1bo4y1w72m/?spm_id_from333.337.search-card.all.click&vd_source569ef4f891360f2119ace98abae09f3f 《要研究的方向和准备》 https://ww…

WSA(Windows Subsystem for Android)安装LSPosed和应用教程

windows安卓子系统WSA的Lsposed和shamiko的安装教程 WSA(Windows Subsystem for Android)安装LSPosed和应用教程 一、环境准备 在开始之前,请确保: 已经安装好WSA(Windows Subsystem for Android)已经安装好ADB工具下载好LSPosed和Shamiko框架安装包 二、连接WSA 首先需要…

辛格迪客户案例 | 河南宏途食品实施电子合约系统(eSign)

01 河南宏途食品有限公司&#xff1a;食品行业的数字化践行者 河南宏途食品有限公司&#xff08;以下简称“宏途食品”&#xff09;作为国内食品行业的创新企业&#xff0c;专注于各类食品的研发、生产和销售。公司秉承“质量为先、创新驱动、服务至上”的核心价值观&#xff…

手机静态ip地址怎么获取?方法与解析‌

而在某些特定情境下&#xff0c;我们可能需要为手机设置一个静态IP地址。本文将详细介绍手机静态IP地址详解及获取方法 一、什么是静态IP地址&#xff1f; 静态IP&#xff1a;由用户手动设置的固定IP地址&#xff0c;不会因网络重启或设备重连而改变。 动态IP&#xff1a;由路…

天下飞飞【老飞飞服务端】+客户端+数据库测试带视频教程

天下飞飞服务器搭建测试视频 天下飞飞【老飞飞服务端】客户端数据库测试带视频教程 完整安装教程。 测试环境 系统server2019 sql2022数据库 sql的安装 odbc搭建 sql加载数据库 此测试端能用于服务器搭建测试。 下载地址为&#xff1a;https://download.csdn.net/d…

Gitea的安装和配置以及应用

Gitea的安装和配置以及应用 一、安装 1、创建数据库和数据库账户&#xff08;pg&#xff09; su – postgres -c "psql" CREATE ROLE gitea WITH LOGIN PASSWORD gitea; CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE …

如何更改OCP与metadb集群的连接方式 —— OceanBase运维管理

背景 许多用户都会借助OCP平台来进行OceanBase集群的运维与监控&#xff0c;且因为考虑单节点的OCP部署&#xff0c;在遇故障时可能会短时间出现无法管控 OceanBase集群&#xff0c;多数用户倾向于采用多节点方式来部署OCP&#xff0c;即 OCP的 metadb集群也是三节点的集群部署…

SpringDoc【使用详解】

SpringDoc使用详解 一、何为SpringDoc二、概念解释三、SpringDoc使用2.1简单集成2.2 配置SpringDoc2.2.1 yml方式配置2.2.2配置文档信息 2.3配置文档分组2.4使用注解2.4.1 Tag2.4.2 Operation2.4.3 Schema2.4.4 NotNull2.4.5 Parameter2.4.6 Parameters2.4.7 ApiResponses 和Ap…

PHP 阿里云oss 使用指南

1.介绍 把图片放到阿里云上的空间上&#xff0c;可以使用cdn加速。 可以在程序里直接调用 要使用阿里云 oss sdk &#xff0c;请先到阿里云下载 或用 copmposer 安装 相关链接&#xff1a; 安装OSS PHP SDK_对象存储(OSS)-阿里云帮助中心 composer require aliyuncs/oss…

【AI提示词】常青笔记生成器

提示说明 生成适用于多个场景和领域的常青笔记&#xff0c;满足“常青笔记”的核心特性和结构。 提示词 # 角色: 常青笔记生成器## 角色简介: - 作者: xxx - 版本号: 1.0 - 更新时间: xxx - 语言: 中文## 定位: - &#x1f3af; 生成适用于多个场景和领域的常青笔记&#x…

在 Lua 中,`for` 和 `while` 是两种核心的循环结构的详细用法

在 Lua 中&#xff0c;for 和 while 是两种核心的循环结构&#xff0c;用于实现重复执行逻辑。以下是它们的详细用法、进阶技巧及注意事项&#xff1a; 在 Lua 中&#xff0c;for 和 while 是两种核心的循环结构的详细用法—目录 一、for 循环1. 数值 for 循环基础语法&#xf…

A2DP(Advanced Audio Distribution Profile)是蓝牙协议栈中用于音频传输的一个标准化协议

A2DP&#xff08;Advanced Audio Distribution Profile&#xff09;是蓝牙协议栈中用于音频传输的一个标准化协议&#xff0c;主要用于高质量音频流的无线传输。以下是A2DP协议的详细信息&#xff1a; 定义 A2DP协议允许音源设备&#xff08;Source&#xff0c;简称SRC&#…

STM32_USB

概述 本文是使用HAL库的USB驱动 因为官方cubeMX生成的hal库做组合设备时过于繁琐 所以这里使用某大神的插件,可以集成在cubeMX里自动生成组合设备 有小bug会覆盖生成文件里自己写的内容,所以生成一次后注意保存 插件安装 下载地址 https://github.com/alambe94/I-CUBE-USBD-Com…

【文献阅读】Capabilities of Gemini Models in Medicine

​ Google DeepMind Google Research 发表于 2024-04-29 相关链接&#xff1a; 数据集&#xff1a;https://huggingface.co/datasets/katielink/med-gemini-medqa-relabeled 注&#xff1a;长EHR是长的电子健康记录&#xff08;Electronic Health Record&#xff09; 未开…

网络安全小知识课堂(最终完结版)

网络安全入门 &#xff1a;从 “小白” 到 “守护者” 的蜕变之旅 写在完结之际 历经 13 篇的深度探索&#xff0c;我们从 DDoS 攻击的 “流量洪水” 一路闯关到 HTTPS 的 “加密堡垒”&#xff0c;揭开了网络安全世界的层层面纱。感谢每一位读者的陪伴与互动&#xff0c;你们…

Php laravel 留言板 curd 实战

1. 项目创建 首先我们用composer创建项目 &#xff0c; composer会根据当前的php版本 帮我们选择支持的最高版本 composer create-project --prefer-dist laravel/laravel myblog laravel新版本比较激进 &#xff0c;需要最低 php7 支持 2. 项目配置 数据库配置 &#xff0c…