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

31 篇文章 0 订阅

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 '登录失败';
	}
    
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现Spring Boot Vue传输的数据加密,可以采用以下步骤: 1. 在Spring Boot中使用Spring Security框架来实现数据加密。可以使用Spring Security提供的加密算法,如AES、DES等。 2. 在Vue中使用加密算法对数据进行加密。可以使用Vue提供的加密库,如CryptoJS等。 3. 在Spring Boot中配置跨域访问,以便Vue可以访问Spring Boot的API。 4. 在Vue中使用axios库来发送请求,并在请求头中添加加密后的数据。 5. 在Spring Boot中解密请求数据,并进行相应的处理。 通过以上步骤,就可以实现Spring Boot Vue传输的数据加密。 ### 回答2: 要实现Spring Boot和Vue传输的数据加密,可以采取以下步骤: 1. 使用Spring Security进行身份验证和授权,确保只有经过身份验证的用户才能访问受保护的接口。可以使用Spring Security的基本身份验证、表单身份验证或令牌身份验证。 2. 在后端Spring Boot应用程序中,使用HTTPS协议来加密数据的传输。通过配置SSL证书,可以确保通信的安全性。可以使用自签名证书或从受信任的证书颁发机构获取证书。 3. 在前端的Vue应用程序中,可以使用axios库来发送HTTPS请求。确保所有的请求都是通过HTTPS协议发送,以保证数据的传输安全。 4. 在后端Spring Boot应用程序中,可以使用加密算法对敏感数据进行加密,例如使用AES加密算法。可以编写自定义的加密和解密工具类,在处理敏感数据时使用这些工具类进行加密和解密操作。 5. 在前端的Vue应用程序中,可以使用加密算法对敏感数据进行加密,例如使用CryptoJS库提供的加密算法。确保在发送数据之前对敏感数据进行加密,接收数据后对加密数据进行解密。 6. 使用消息摘要算法对数据进行签名,以确保数据的完整性和验证数据来源的真实性。可以在后端和前端分别使用相同的签名算法进行数字签名和验证。 通过以上步骤,可以实现Spring Boot和Vue之间传输数据的加密。同时要注意在安装证书和设置HTTPS时的安全最佳实践,以确保数据传输的安全性和完整性。 ### 回答3: 实现Spring Boot和Vue传输的数据加密主要可以通过以下步骤来实现: 1. 前后端建立安全连接:确保前后端之间的通信通过HTTPS进行加密传输,可以在服务器上配置SSL证书来启用HTTPS连接。 2. 在Spring Boot中使用加密算法:可以使用Spring Security框架来实现对数据的加密和解密操作。通过引入相应的依赖包,配置相应的加密算法,使用指定的密钥对数据进行加密和解密操作。 3. 在Vue中使用加密算法:在前端页面中引入加密算法的JavaScript库,例如CryptoJS。根据数据的加密算法和密钥,使用相应的方法对数据进行加密和解密操作。 4. 对敏感数据进行加密:在传输敏感数据之前,将其进行加密处理。例如,在后端使用Spring Boot将数据加密后,将加密后的数据传输给Vue前端进行显示和处理。 5. 加密相关的数据传输约定:在前后端之间约定好加密和解密的算法、密钥和加密方式。确保前后端都按照相同的约定进行加密和解密操作,保证数据的一致性和安全性。 综上所述,实现Spring Boot和Vue传输的数据加密需要建立安全连接,配置加密算法,使用相应的加密库进行加密和解密操作,并对传输的敏感数据进行加密处理。同时,还需要定义加密相关的数据传输约定,确保前后端按照相同的方式进行加密和解密操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值