加密前端传参和后端结果返回加密
好的,我分别给出一个简单的前端代码样例和后端 Node.js 代码样例,示范如何加密前端传参和后端结果返回的加密。
前端代码示例:
import CryptoJS from 'crypto-js';const key = CryptoJS.enc.Utf8.parse('1234567890abcdef'); // 定义加密密钥
const data = { username: 'user123', password: 'password123' };
const ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data),key,{ mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }
).toString();fetch('https://api.example.com/auth', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({ data: ciphertext }),
})
.then(response => response.json())
.then(result => {const decrypted = CryptoJS.AES.decrypt(result.data,key,{ mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8);console.log(JSON.parse(decrypted));
})
.catch(error => console.log(error));
上面这段代码中,定义了一个 16 位加密密钥,使用 CryptoJS 进行前端加密和解密。在发送请求前,使用 AES 加密需要传递的数据,并将密文作为参数传递给后端。后端返回的密文需要使用相同的密钥进行解密,才能获得返回结果。
后端代码示例:
const express = require('express');
const app = express();
const CryptoJS = require('crypto-js');app.use(express.json());app.post('/auth', function(req, res) {const key = CryptoJS.enc.Utf8.parse('1234567890abcdef'); // 定义加密密钥const ciphertext = req.body && req.body.data;if (!ciphertext) {throw new Error('缺少加密参数!');}const bytes = CryptoJS.AES.decrypt(ciphertext, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });const decrypted = bytes.toString(CryptoJS.enc.Utf8);const data = JSON.parse(decrypted);// 后端业务代码处理,生成最终结果const responseData = { userId: 'user123', token: '0123456789abcdef' };const responseCiphertext = CryptoJS.AES.encrypt(JSON.stringify(responseData),key,{ mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString();res.json({ data: responseCiphertext });
});app.listen(3000, () => console.log('启动服务器,端口号:3000'));
上面这段代码使用 Node.js 实现了一个简单的 HTTP 服务器,处理 POST 请求并返回加密的处理结果。在处理参数时,先使用相同的密钥对前端传入的密文数据进行解密,再进行业务处理并生成最终结果。最后使用 AES 进行加密,并将加密后的密文作为结果返回给前端。
以上示例代码供参考,实际开发中需要根据具体的业务需求进行调整和优化。
以下是使用 PHP 语言实现的后端代码样例。和前面给出的 Node.js 代码示例逻辑类似,使用相同的 AES 加密算法来加密参数和返回结果。
<?phpfunction encrypt($data, $key) {$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);$pad_size = 16 - (strlen($data) % 16);$data = $data . str_repeat(chr($pad_size), $pad_size);$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB, $iv);return base64_encode($ciphertext);}function decrypt($ciphertext, $key) {$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);$decode = base64_decode($ciphertext);$plaintext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $decode, MCRYPT_MODE_ECB, $iv);$pad_size = ord($plaintext[strlen($plaintext) - 1]);$plaintext = substr($plaintext, 0, -$pad_size);return $plaintext;}$key = '1234567890abcdef'; // 定义加密密钥$ciphertext = $_POST['data'];if (!$ciphertext) {throw new Exception("缺少加密参数!");}$decrypted = decrypt($ciphertext, $key);$data = json_decode($decrypted);// 后端业务代码处理,生成最终结果$responseData = [ "userId" => "user123", "token" => "0123456789abcdef" ];$responseCiphertext = encrypt(json_encode($responseData), $key);echo json_encode([ "data" => $responseCiphertext ]);
?>
以上 PHP 代码使用 mcrypt 库来实现加密和解密,使用 AES 加密算法来加密参数和返回结果。
需要特别注意的是,mcrypt 已经被 PHP7 废弃,建议替换为其他加密方式,如 OpenSSL。同时,需要注意加密模式、填充方式、加密初始向量等参数的设置,以保证加密效果的安全性。
好的,我可以给您提供一个简单的示例代码,用于前端对敏感数据进行 AES 加密的实现。以下代码是使用 CryptoJS 库进行加密的示例。
首先需要在 HTML 中引入 CryptoJS 库:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
然后在 JavaScript 中调用以下代码进行加密:
// 待加密数据
var dataToEncrypt = 'This is a test message';// AES 加密密钥
var encryptionKey = 'This is an encryption key';// 通过 CryptoJS 的 AES 加密模块进行加密
var encryptedData = CryptoJS.AES.encrypt(dataToEncrypt, encryptionKey);// 将加密后的数据转换为字符串形式
var encryptedDataStr = encryptedData.toString();
以上代码将输出加密后的数据的字符串形式,可以将其提交到后端进行解密处理。需要注意的是,加密解密使用的密钥必须保密,不能在前端代码中明文存储,否则加密的意义就失去了。最好的方式是在服务器端生成密钥并发送给客户端(比如在用户登录时),客户端保存密钥并在之后的通信过程中使用。
当然,这只是一个最简单的示例,实际使用时需要考虑更多实际情况,比如加密算法的选取、密钥的生成、数据的编码方式等等。
加密前端传参和后端结果返回加密相关推荐
- springboot前端传参date类型后台处理方式
springboot前端传参date类型后台处理方式 先说结论:建议大家直接使用@JsonFormat,原因如下: 1.针对json格式:在配置文件中加以下配置 spring.jackson.date ...
- 【spring-boot】前端传图像到后端
spring-boot+thymeleaf+ajax前端传图像到后端 注意: 前端html 前端js(ajax) 后端controller层 配置文件application.yml 注意: 本文总体上 ...
- 前端传对象都后端获取参数的时候多了一对双引号
前端传参:正常传参.... 后端接收到的参数:多了双引号 找了好久都不懂哪里出错了,百度的方法前端的后端的都试了个遍也不行,后面还是从头到尾看了很多遍,参数也换了都不行,最后把入参的对象改了一下,果然 ...
- 任务(多线程并行)TFDMemTable内存表传参方式调用服务器返回的TDataSet
任务(多线程并行)TFDMemTable内存表传参方式调用服务器返回的TDataSet 服务器端: function TServerMethods1.getTFDDataSet ( const p ...
- ajax前端传参总结
总结 @RequestParam()接收前端数据的情况: POST请求"application/x-www-form-urlencoded'",此时传参能用JSON.stringi ...
- 微信小程序传参到后端解析出手机号(java实现)
需要的Maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson< ...
- 使用Axios拦截器打印前端请求日志和后端后返回日志
在main.ts引入 import axios from 'axios'; axios.defaults.baseURL = process.env.VUE_APP_SERVER;/*** axios ...
- 用moment获取一年内指定周的起始时间和结束时间、用户所选时间和前端传参时间不一致问题
问题1: 原代码: //所选周selectedWeek:{handler(){let selectedWeek = parseInt(this.selectedWeek.substring(1))// ...
- php后端aes加密前端解密
项目场景: 领导要求公司后台的全部接口与前端交互时,所有参数以及返回值需要进行加密.后端语言 PHP,使用框架 tp5.1,前端vus.js,使用CryptoJS加解密 效果如下: 前端传参: 后端返 ...
最新文章
- 网络流24题-骑士共存
- python实现迭代的快速排序(Iterative Quick Sort)
- Spring编程式和声明式事务实例讲解
- python密码学编程pdf-Python密码学编程PDF电子书免费下载
- 何杰月c语言课程,北京西城区教育科研月:学科核心素养的教学探索
- CRM公海自动回收规则
- python入门之字符串处理_Python基础之字符串操作,格式化。
- matlab rsdec,MATLAB在RS码实现中的应用
- VUE 生命周期图示
- java常用string inputStream转换
- android下载文件下载不完全解决方案
- 你还在为找素材发愁吗?自媒体高手都知道的免费自媒体素材网
- Android开发之高德地图导航
- arduino ps2摇杆程序_Arduino 双轴按键摇杆 PS2游戏摇杆 控制杆 JoyStick 电子积木
- Python强智教务系统模拟登录的两种方式
- 计算机内存错误 要降频,win7系统出现内存自动降频的解决方法
- Windows Server 2022 超融合部署
- 维特比算法的通俗案例解释
- 二进制小数转换为十进制数和
- python 如何将JSON数据原封不动的转为字符串(顺序不能变动)?