tp6+vue实现非对称加密登录

tp6api接口加密中间件 前言 前段时间老板突然说,APP的接口能不能加密,token容易被人破解,让我想个办法,不让别人破解。我一阵搜索脑袋,发现这东西没做过,就对老板说了一句我试试。作为一个程序员,面向百度编程,已成了必备技能。网上百度一下,主要有几种方式进行加密: php后端生成密钥发给开发人员,开发人员根据密钥,把参数加上进行md5加密,生成sign。后端拿到数据根据密钥也进行加密,比对sign。安全性较强 token加密,这个加密方式已经太普遍了,只要拿到用户的token,就可以随便请求,安全性一般 通过对称加密算法,该 阅读详情

vue安装下载jsencrypt(使用npm i -S jsencrypt安装会报错,只能使用cnpm安装)

cnpm i -S jsencrypt

npm安装

npm install jsencrypt
<script src="http://passport.cnblogs.com/scripts/jsencrypt.min.js"></script>

vue

<template>
<el-form :model="ruleForm"
                    ref="ruleForm" 
                    label-width="0" 
                    class="login-page">
                        <el-form-item prop="user_name">
                            <el-input type="text" 
                                v-model="ruleForm.user_name"
                                autocomplete="on" 
                                placeholder="用户名"
                                maxlength="50"
                                size="large"
                                @keydown.enter.native="login"
                            ></el-input>
                        </el-form-item>

                        <el-form-item prop="user_password">
                            <el-input type="password" 
                                v-model="ruleForm.user_password"
                                autocomplete="on" 
                                placeholder="登录密码"
                                maxlength="50"
                                size="large"
                                @keydown.enter.native="login"
                            ></el-input>
                        </el-form-item>

                        <el-form-item prop="vcode" class="vcode_box">
                            <el-input
                                v-model="ruleForm.vcode"
                                placeholder="验证码"
                                autocomplete="off"
                                maxlength="4"
                                style="width: 200px;"
                                size="large"
                                @keydown.enter.native="login"
                            ></el-input>
                            <div class="vcode" title="点击重新生成验证码">
                                <img @click="refreshCode" :src="imgCode" alt="验证码">
                            </div>
                        </el-form-item>

                        <el-button class="login_btn" @click="login" >登录</el-button>
                    </el-form>
</template>
<script>
import { JSEncrypt } from "jsencrypt";
export default{
	data() {
        return {
            ruleForm: {
                user_name: '',
                user_password: '',
                code: ''
            },
            imgCode: '验证码地址',
            publicKey: ''
        }
    },
    methods: {
    	// 获取公钥
		async getPublicKey(){
            const {data:res} = await this.$axios.get("getSecretkey");
            if(res.state){
                this.publicKey = res.content;
            }else{
                this.$message.error("网络错误,请稍后重试!");   
            }
        },
        // 点击登录
        login(){
			// ... 验证用户名、密码、验证码是否输入
			let formData = this.ruleForm;
			let encryptor = new JSEncrypt();
            encryptor.setPublicKey(this.publicKey);
            // 将用户名和密码加密处理
            let data_encrypted = encryptor.encrypt(formData.user_name+','+formData.user_password);
            var datas = {};
            datas.code = formData.code;
            datas.logininfo = data_encrypted;
            this.$axios.post('login', datas).then(res => {
				console.log(res)
			});
		}
	}
}
</script>

php

安装openssl扩展
小P(phpstudy):打开小p工具 -> 网站 -> localhost(管理)-> php扩展找到openssl并打开
原生php:打开php.ini文件,搜索extension=openssl,将前面的;删除,保存重启服务

public function getSecretkey(){
        // 检测今天生成的密钥文件是否存在,不存在则生成
        if( file_exists("./secretKey/".date('Ymd', time()).'_publicKey.pem' )){
            // 读取该文件
            $public_key = file_get_contents("./secretKey/".date("Ymd", time())."_publicKey.pem");
            return $public_key;
        }else{
            # 1.清空目录中非当天生成的加密文件
            if(is_dir("./secretKey")){
                $dirs = scandir("./secretKey"); // 获取该目录下所有目录及文件
                foreach($dirs as $file){
                    if($file != '.' && $file != '..'){
                        $sonFile = "./secretKey/".$file;
                        @unlink($sonFile);
                    }
                }
            }
            # 2.生成文件
            $config = array(
                'config' => 'D:\phpstudy_pro\Extensions\Apache2.4.39\conf\openssl.cnf',//安装PHP7会自带这个配置文件
                "digest_alg" => "sha512",
                "private_key_bits" => 1024,
                "private_key_type" => OPENSSL_KEYTYPE_RSA,   //加密类型
              );
            $res = openssl_pkey_new($config);
            //提取私钥
            openssl_pkey_export($res, $private_key, null,$config);
            //生成公钥
            $public_key = openssl_pkey_get_details($res);
            $public_key=$public_key["key"];
            file_put_contents("./secretKey/".date('Ymd', time())."_publicKey.pem", $public_key); // 生成公钥
            file_put_contents("./secretKey/".date('Ymd', time())."_privateKey.pem", $private_key); // 生成私钥
            return $public_key;

        }
    }

public function login(){
	$data = input('post.');
    // 使用密钥进行解密获取数据
    $privateKey = file_get_contents("./secretKey/".date('Ymd', time())."_privateKey.pem");
    if(!openssl_private_decrypt(base64_decode($data['logininfo']), $decrypted, $privateKey)){
        return show(false, '501.非法请求');
    }
    $login_info = explode(",", $decrypted);
    // 用户名、密码、验证码验证
    $res = $this->check_login($login_info[0], $login_info[1], $data['code']);
    if($res){
		return '登陆成功';
	}else{
		return '登录失败';
	}
    
}
流媒体建设及部署指导 例如,在处理RTSP请求时,ZLMediaKit采用了异步非阻塞的方式,这大大提升了服务器处理并发请求的能力,使得即使是面对大量用户的直播场景,也能保持良好的性能表现。无论是哪种协议,ZLMediaKit都致力于提供最佳的用户体验,通过灵活的配置选项,用户可以根据具体需求选择最合适的传输方式,确保每个场景下都能获得最优的播放效果。协议支持完善:支持的RTMP协议确保了直播内容的快速传输,同时还具备动态调整码率的功能,可以根据网络状况自动调节视频质量,从而在保证流畅播放的同时,也兼顾了画质的清晰度; 阅读详情

相关推荐

ThinkPHP6中数据加密和解密操作详解

数据解密是将密文数据还原为明文数据的过程,以便对数据进行使用和处理。在ThinkPHP6中,我们可以使用相同的密钥和加密算法来对数据进行解密。数据加密是将明文数据转换为密文数据的过程,以保护数据的机密性。然而,为了更好的安全性,我们应该使用更长、更复杂的密钥,并将其存储在配置文件中。在ThinkPHP6框架中,我们经常需要对敏感数据进行加密和解密操作,以确保数据的安全性。此外,您还可以自定义加密密钥,以提高数据的安全性。通过以上步骤,您可以在ThinkPHP6中进行数据加密和解密操作,并确保数据的安全性。

MquaDevops的博客 1385

【无标题】关于本地tp6+vue3前后端分离中前端主域名和子域名cookie共享、删除实时同步用户状态

2,前端存储cookie,需要注意必须设置domain为主域名子域名才能共享cookie。3删除时也要制定domain。1,获取到后端用户信息。

weixin_45524755的博客 425

tp6-vue-admin:基于thinkphp6+vue2.6+element2.13 前后端分离落地解决方案

#thinkphp6+vue2.6+element2.13 前后端分离落地解决方案 本人开发环境版本信息: npm=6.13.4 vue =@vue/cli 4.1.2 node=v12.14.1 #注意1:vue-admin 中接口请求规则和动态路由,是对应tp6 中的接口规则和权限规则,需同时安装tp6和vue-admin 才能运行项目 #注意2:env 环境配置文件VUE_APP_BASE_API 接口地址,生产环境 或开发环境,需改变自己项目真实路径 #注意3:开发环境,如果使用代理,解决跨域问题,接口地址在 vue.config.js 设置代理proxy,转到 ,.env.development中的VUE_APP_BASE_API 设置空即可。 #注意4:如果只运行vue-admin前端,则可以把代理转到 #注意5:登录验证码,使用组件对think-captcha 进行修改,适

基于ThinkPhp6+Vue+ElementUI低代码开发平台

一款 PHP 语言基于ThinkPhp6、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,目前框架已集成了完整的RBAC权限架构和常规基础模块,前端Vue端支持多主题切换,可以根据自己喜欢的风格选择想一个的主题,实现了个性化呈现的需求;

西里古里的博客 9252

TP6 + VUE workman

chat 采用tp6 + vue (CDN) 方式编码,创建初衷在于博客讨论 使用 简单的

利用Pandas进行高效网络数据获取

本文将重点介绍如何使用Pandas库进行网络爬虫。爬取数据是获取互联网上信息的常见方式之一,而Pandas作为一种强大的数据处理和分析工具,为我们提供了便捷的方法来处理和清洗从网页上获取的数据。文章将从爬取网页数据开始,包括使用Python的Requests库发送HTTP请求获取网页内容,并使用Pandas的功能来解析和提取所需的数据。我们还将讨论如何处理网页中的表格数据、处理和清洗数据、保存数据到文件等常见任务。

ak_bingbing的博客 1438

快马AI助力国密开发:5分钟用sm-crypto打造安全聊天应用

通过这个项目,我深刻体会到国密算法的实用性和sm-crypto的便捷性。后续计划增加群聊功能,研究如何用SM2实现群密钥协商。整个开发过程最惊喜的是用快马平台快速实现了项目部署,他们的AI辅助编程功能也很智能,能自动补全sm-crypto的相关代码,大大提高了开发效率。

AgatePanther34的博客 407

通达信缠论中枢自动识别与画线实战指南

本文详细介绍了通达信缠论中枢自动识别与画线公式的实战应用。该工具通过严谨的算法逻辑,自动在K线图上标记出符合缠论定义的中枢区间,帮助投资者摆脱繁琐的手工画图,聚焦于价格与中枢的互动关系,从而高效识别趋势延续、背驰及第三类买卖点,提升缠论分析与交易决策的效率。

weixin_29267307的博客 662

thinkPHP6+vue3全栈开发实战运营级系统架构课程

 课程概述本季度基于Vue3 + ElementPlus + ThinkPHP6实战全栈开发运营级系统架构,其中包括SCUI框架的使用、API接口标准开发、运营级路由权限管理、消息队列的封装、soket即时通讯及系统底层架构的搭建等提升知识。  

探索robotics-toolbox-python:从基础安装到高级机器人运动学应用

本文详细介绍了robotics-toolbox-python工具箱,从基础安装、环境配置到机器人运动学与动力学的核心应用。通过D-H参数、URDF导入和内置模型三种方式快速构建机器人模型,并演示了正逆运动学计算、关节空间与任务空间轨迹规划以及三维可视化仿真。该工具箱极大地简化了机器人算法开发流程,是进行机器人学研究和应用实践的强大工具。

i1j2k的博客 496

Ubuntu20.04安装Ceres库

ceres真难安装。

little_white138的博客 8379

Thinkphp 6 使用RSA非对称加密算法 对接口加密解密

后台接口中 经常使用到加密算法 如何使用RSA 非对称加密 对数据进行加密传输。将下载好的RSA 算法 放入 到 TP6项目根目录下 extend 拓展目录中。使用系统自动生成的 32为加密进行加密解密。利用公钥加密,私钥解密做数据保密通信!利用私钥加密,公钥解密可以做身份验证。下载RSA 加密算法。

chinanes的博客 2923

手把手教你排查Abaqus中的Johnson-Cook损伤参数:避免因d3正负号导致的仿真失败

本文详细解析了Abaqus中Johnson-Cook损伤参数d3正负号设置的关键问题,帮助用户避免因参数错误导致的仿真失败和Excessive distortion报错。通过对比不同文献定义、提供实操指南和典型错误排查流程,有效提升非线性分析的准确性和效率。

weixin_33960567的博客 355

tp6+vue-elementui-admin实现前后端权限分离框架

这次用的是hardphp/tp6-vue-admin。

李小砍的技术博客 2495

手把手教你ensp仿真搭建校园网(含防火墙及无线网络)系列(三)校园无线网络AC+AP配置

本系列博客将带你从零开始,使用 华为 eNSP(Enterprise Network Simulation Platform) 仿真搭建一个完整的校园网络,涵盖 核心层、汇聚层、接入层、防火墙安全策略、无线AC+AP组网 等实战场景。无论你是网络初学者还是希望深化实战经验的工程师,都能通过本教程掌握企业级网络的规划、配置与排错技巧。

echo的博客 1359

ubuntu20.04搭建QGC4.2编译环境

QGC 4.2ubuntu18.04也可以编译QGC4.2,但是由于GLBC版本较低,无法使用最新版的QTCreator,Ubuntu20.04可以使用最新版QTCreator。

超维空间科技的博客 1万+

Thinkphp6 框架中部署vue项目

如何在thinkphp 框架中 部署vue 项目,无需子域名

weixin_51224282的博客 5885

手把手教你学PCIE--系统内存管理:GART(Graphics Address Remapping Table)的典型用途详解

GART(图形地址重映射表)是GPU的核心组件,主要用于地址映射转换。其典型用途分为物理模式和虚拟模式两类:在物理模式下,GART将GPU虚拟地址映射到分散的物理内存,支持DMA连续访问非连续内存块,适用于GPU渲染纹理采样和AI推理数据搬运等场景;在虚拟模式下,GART配合IOMMU实现多级映射,将GPU虚拟地址转换为虚拟机物理地址再映射到宿主机物理地址,确保多租户隔离,应用于云服务器GPU共享和容器化AI训练等虚拟化环境。两种模式分别优化了高性能计算场景和虚拟化场景的需求。

MHD0815的博客 367

Vue+tp6 php框架如何快速建立一个前后端分离项目

作者主要是写后端的,所以本文主要以后端的角度,讲如何使用Vue+Tp框架结合,快速打通一个前后端分离的项目部署,可以作为后端学习Vue的入门步骤,通过此教程,你可以学到在生产环境和本地环境中,vue+tp 等框架是如何结合以及部署的。 提示: 1、写本文章时,代码环境在Windows 系统下,本地使用PHPstudy集成环境讲解。 2、本文章主要向初学Vue的后端同学讲解Vue与后端基础的结合使用 3、如果有看过Vue的文档,并且学习过基础语法以及使用,会使你更易理解下面的内容。 一:安装 Node 环境

开源世界 5767

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

对象排序 ascii码排序及遍历

cesi:function () { var obj = { coach_id:1, coach_ad_id:12, type:1, token:this.$cookieStore.getCookie( 'token'), timestamp:new Date().getTime(), // sign 1 } fun...

Thekingyu的博客 2164

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【亲测免费】 推荐项目:TP6-Vue-Admin - 基于ThinkPHP6和Vue.js的后台管理系统

推荐项目:TP6-Vue-Admin - 基于ThinkPHP6和Vue.js的后台管理系统 项目简介 TP6-Vue-Admin 是一个开源的、基于现代化前端技术和后端框架构建的高效、易用的后台管理系统模版。它整合了ThinkPHP6 和 Vue.js,旨在帮助开发者快速搭建企业级Web应用。该项目遵循MIT许可证,允许自由使用和修改,为社区贡献者提供了丰富的实践和学习机会。 技术栈分析 后端:...

gitblog_00094的博客 1231

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Vue3+TP6微信开发实战指南

摘要: 整合Vue3与ThinkPHP6进行微信公众号开发,需前后端协作: 后端(TP6):配置路由处理微信验证(GET)和消息事件(POST),需校验签名并响应XML消息。 前端(Vue3):构建H5页面,通过Axios调用TP6接口,部署至HTTPS服务器。 公众号配置:在微信后台绑定TP6的URL与Token,菜单链接指向Vue3页面。 注意事项:确保HTTPS、处理跨域(CORS中间件)、调试时使用开发者工具。核心流程为:微信请求→TP6处理→Vue3交互。

745

php 前后端 不对称加密,前后端都在用的加解密技术

# 介绍数字签名、信息加密在前后端开发是经常用的的技术,主要的应用场景比如:用户登录、交易、信息通信、认证等。不同的应用场景可能会选择不同的签名加密算法,下面给大家介绍几种比较常用的签名加密算法。# AES高级加密标准(AES,Advanced Encryption Standard)是最常见的对称加密算法比如:微信小程序加密传输就是用这个加密算法的。对称加密算法也就是加密和解密用相同的密钥,具体...

weixin_28878117的博客 492

技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证

技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-4.跨域且传

最强的森的博客 1495

Vue前端浏览器链接/接口参数实现加密

由于项目创建之前后端设计不合理,导致详情页链接参数id为顺序序数(例:1,2,3...等等),安全系数非常低(虽然我们前端做了菜单权限、按钮权限、Api权限等等),现在要前端解决下浏览器链接/接口参数实现加密

仙人掌上的刺猬的博客 5929

前端vue项目中接口前后的加密解密

前端vue项目中接口前后的加密解密 项目需求,对于敏感的数据进项加密! 提到加密首先想到的是crypto-js 本片文章是实际项目中所遇到的,主要采用的是crypto-js AES****RSA 以及qs(不作详细介绍,用兴趣的可以自行百度) crypto-js jsencrypt.js实际使用例子: 在src文件下创建tools文件,在tools文件下创建crytoJs.js 和jsencrypt.js 目录 src/tools/crytoJs.js 目录 src/tools/jsencrypt.js

Gaoju_liz的博客 2043
上一篇: tp6+jwt实现token生成及验证,tp+vue请求接口header中加入token报跨域错误解决
下一篇: 使用ppt将输入的文字导出png
if时光重来
博客等级 码龄8年 248粉丝 217原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值