关于unicloud 云函数开发 加密的问题

解决的问题:

1.在云函数请求过程中入参参数暴露

2.云函数请求结束之后 出参结果暴露

解决方法:

1.在请求过程中对云函数的入参进行加密,在后端接收的时候将加密信息进行解密,根据自己的逻辑成功之后加密返回给前端 前端解密之后进行赋值。代码如下

A.使用crypto.js 定义两个方法encrypt加密方法和decrypt解密方法

代码如下:

const crypto = require('crypto');const algorithm = 'aes-256-cbc';
const password = '你自己定义的密匙'; // 密钥
const key = Buffer.alloc(32, password, 'utf8'); // 生成32字节的密钥
const iv = crypto.randomBytes(16); // 生成16字节的初始化向量//加密
export function encrypt(text) {let cipher = crypto.createCipheriv(algorithm, key, iv);let encrypted = cipher.update(text, 'utf8', 'hex');encrypted += cipher.final('hex');return {iv: iv.toString('hex'),encryptedData: encrypted};
}
//解密
export function decrypt(encrypted) {let iv = Buffer.from(encrypted.iv, 'hex', 'utf8');let encryptedData = Buffer.from(encrypted.encryptedData, 'hex', 'utf8');let decipher = crypto.createDecipheriv(algorithm, key, iv);let decrypted = decipher.update(encryptedData, 'binary', 'utf8');decrypted += decipher.final('utf8');return decrypted;
}


 

B.新建一个request.js, 将请求方法进行封装
import {encrypt,decrypt
} from './jiami.js'//是否加密字段
var isEncrypted = falseconst req = (funName, params) => {var row = {};params.isEncrypted = isEncryptedif (isEncrypted) {row = {code: encrypt(JSON.stringify(params))}} else {row = params}console.log(row)return new Promise((resolve) => {uniCloud.callFunction({name: funName,data: row,success: res => {if (res.result.code == 200) {res.result.info = JSON.parse(decrypt(res.result.info))resolve(res.result)} else {resolve(res.result.code)}},fail: () => {resolve(false)}})})
}module.exports = {req
}

C.使用前,记得在main.js里面引用
import reqFun from './common/request.js'Vue.prototype.$reqFun = reqFun
D.使用上述定义的方法

将原始的

unicloud.callFunction替换成

this.$reqFun.req('你请求的云函数名称', '你的入参').then(res => {//处理你的逻辑       })

E.云函数里面使用

//解密使用
   const {
    getVersion,
    encrypt,
    decrypt
} = require('encryption-and-decryption')

 let arrayEvent = JSON.parse(decrypt(event.code))

arrayEvent这个就是解密之后的入参了,直接按照原来的event使用,自己的逻辑写完之后加密:

var result = encrypt(JSON.stringify(articleData))
    //返回数据给客户端
    return {
        success: true,
        code: 200,
        message: '操作成功',
        info: result
    }
   

将数据返回给客户端。客户端获取到的res 就是解密之后的出参数据了

  最最最重要的一点事加密方法在云函数里面还要在写一次(common目录 新建公共模块),

const crypto = require('crypto');const algorithm = 'aes-256-cbc';
const password = '你的自定义密匙'; // 密钥
const key = Buffer.alloc(32, password, 'utf8'); // 生成32字节的密钥
const iv = crypto.randomBytes(16); // 生成16字节的初始化向量//加密
function encrypt(text) {let cipher = crypto.createCipheriv(algorithm, key, iv);let encrypted = cipher.update(text, 'utf8', 'hex');encrypted += cipher.final('hex');return {iv: iv.toString('hex'),encryptedData: encrypted};
}//解密
function decrypt(encrypted) {let iv = Buffer.from(encrypted.iv, 'hex', 'utf8');let encryptedData = Buffer.from(encrypted.encryptedData, 'hex', 'utf8');let decipher = crypto.createDecipheriv(algorithm, key, iv);let decrypted = decipher.update(encryptedData, 'binary', 'utf8');decrypted += decipher.final('utf8');return decrypted;
}
module.exports = {// 公用模块用法请参考 https://uniapp.dcloud.io/uniCloud/cf-commonencrypt,decrypt
}

我自己就是这样做的,如果大佬还有更好的方法,请大佬不吝赐教。

                                我是大脸猫  一个自学前端毫无理论基础的代码渣渣= =

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

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

相关文章

多目标遗传算法(NSGAⅢ)的原理和matlab实现

参考文献: [1] Deb K , Jain H .An Evolutionary Many-Objective Optimization Algorithm Using Reference-Point-Based Nondominated Sorting Approach, Part I: Solving Problems With Box Constraints[J].IEEE Transactions on Evolutionary Computation, 2014,…

【Simple PIR】单服务器开源最快匿踪查询算法解析

7月17日,我们在《隐私计算匿踪查询技术深入浅出》中介绍了关于隐私计算中匿踪查询的定义和常见算法,并引出了前沿算法Simple PIR的介绍,本次将对Simple PIR进行正式的算法原理介绍。 1. Simple PIR快览 1.1 性能介绍 Simple PIR是Alexandra…

docker 打包orbbec

docker pull humble容器 sudo docker run -it osrf/ros:humble-desktop docker 启动容器 sudo docker run -u root --device/dev/bus/usb:/dev/bus/usb -it -v /home/wl:/share --name wl4 osrf/ros:humble-desktop /bin/bash新开一个终端 查看本地存在的容器:…

每类数据保留前n条(sql)

1、前言 因为遇到过好几次该需求,所以想着总结下,以后可以直接复用 2、背景及需求 背景:数据库中有多类数据,每类数据都有很多条 需求:每类数据按id排序,保留id较大的前1000条数据(注意是每…

高速ADC模拟输入接口设计

目录 基本输入接口考虑 输入阻抗 输入驱动 带宽和通带平坦度 噪声 失真 变压器耦合前端 有源耦合前端网络 基本输入接口考虑 采用高输入频率、高速模数转换器(ADC)的系统设计是一 项具挑战性的任务。ADC输入接口设计有6个主要条件: 输入阻抗、输入驱动、带宽…

MYSQL设计和开发规范(简易版)

MYSQL设计和开发规范 1. 整体描述2. 数据库设计规范2.1 表名命名规则2.2 是否字段2.3 字母与数字2.4 禁止使用保留字2.5 可变字符串规范2.6 字段设计 3. 数据库索引规范3.1 命名规则3.2 唯一索引规范3.3 join规范3.4 varchar规范3.5 模糊搜索规范 4. 数据库SQL语句规范4.1 语句…

开源模型应用落地-FastAPI-助力模型交互-进阶篇-中间件(四)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理,使应用程序能够处理各种不同的请求场景,提高应用程序的灵活性和可扩展性。 在数据验证和转换方面,高级用法提供了更精细和准确的控制&#…

IPython魔法命令的深入应用

目录 IPython魔法命令的深入应用 一、魔法命令基础 1. 魔法命令的分类 2. 基本使用 二、高级应用技巧 1. 数据交互与处理 2. 交互式编程与调试 三、魔法命令的进阶操作 1. 自定义魔法命令 2. 利用魔法命令优化工作流程 四、总结与展望 IPython魔法命令的深入应用 IP…

vulnhub——Ai-Web1靶机渗透

Ai-Web1靶机渗透 靶机下载: 官网地址:https://www.vulnhub.com/entry/ai-web-1,353/ 攻击机:kali2024 一、信息收集 发下目标主机的IP为:192.168.201.141 用nmap工具扫描一下对方主机和服务 发现他打开了80端口 发现搜不到于是…

人是一个AI Agent吗?

人是一个AI Agent吗? 什么是AI Agent?人类的感知能力人类的推理与决策人类的执行能力人类的学习能力人类作为AI Agent的局限性结论 随着人工智能(AI)技术的不断发展,AI已经在许多领域展现出其强大的能力。AI Agent&…

详解数据结构之二叉树(堆)

详解数据结构之二叉树(堆) 树 树的概念 树是一个非线性结构的数据结构,它是由 n(n>0)个有限节点组成的一个具有层次关系的集合,它的外观形似一颗倒挂着的树,根朝上,叶朝下,所以称呼为树。每颗子树的根节点有且只…

C#调用非托管dll的两种方式

C#调用非托管DLL的两种方式 在开发过程中,我们经常需要调用一些非托管的DLL库,比如用Delphi编写的DLL。本文将介绍两种在C#中调用非托管DLL的方法。 示例DLL 首先,我们有一个Delphi编写的DLL,它导出了一个名为MyFunction的方法…

TextView实现原理分析

TextView 是 Android 中用于显示文本的核心组件,它的实现原理涉及多个方面,包括文本渲染、布局计算、滚动支持等。下面,我将结合源码分析 TextView 的关键实现细节。 1. 构造和初始化 TextView 是 View 的子类,同时继承自 AppCo…

QXlsx读写excel

QXlsx读写excel 安装 QXlsx使用 qmake使用 CMake 基本用法1. 写入 Excel 文件2. 读取 Excel 文件 详细用法1. 设置单元格样式2. 合并单元格3. 创建图表4. 设置列宽和行高 完整示例 QXlsx 是一个用于在 Qt 应用中读写 Excel 文件的第三方库。它提供了丰富的 API,可以…

Android Studio关于Gradle及JDK问题解决

1.Android Studio 版本如:Android Studio Koala | 2024.1.1 2.Gradle 版本为:8.7 3.JDK 版本为:17 以上这三个必须匹配,具体可以看官网Android Studio 版本说明(https://developer.android.google.cn/studio?hlzh-…

autoware.universe源码略读(3.17)--perception:occupancy_grid_map_outlier_filter

autoware.universe源码略读3.17--perception:occupancy_grid_map_outlier_filter Overview(Class)RadiusSearch2dfilter(Class Constructor)RadiusSearch2dfilter::RadiusSearch2dfilter(mFunc)RadiusSearc…

2月科研——arcgis计算植被差异

ArcGIS中&#xff0c;设置高于或低于某个值的像元为 -9999&#xff0c;然后将这些地方设为空——目的&#xff1a;去除异常值和黑色背景值 Con(("T_std ano7.tif" > 2) | ("T_std ano7.tif" < - 2), - 9999,"T_std ano7.tif") SetNull(&…

python基础语法 007 文件操作-1读取写入

1 文件操作 1.1 什么时候用文件操作&#xff1f; 打开文档写东西看东西拿文档做统计 在python 文档操作作用 存储数据读取数据 打开文件有什么用&#xff1f; 读取数据&#xff0c;写入数据不管什么数据都可以用open打开&#xff0c;如可复制一张图片 1.2 open() 读取,…

c++中的冒泡排序(Bubble Sort),插入排序(Insertion Sort)和选择排序(Selection Sort)

前言 hello大家好啊&#xff0c;这里是文宇&#xff0c;不是文字&#xff0c;是文宇哦。今天开始爆更 冒泡排序&#xff08;Bubble Sort&#xff09; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它属于比较排序算法的一种。冒泡排序的基本…

Java开发利器:深入浅出`java.util.Objects`

在Java开发过程中&#xff0c;java.util.Objects作为一个不可或缺的工具类&#xff0c;为开发者提供了诸多实用方法&#xff0c;用以简化对象操作、提升代码健壮性和可读性。本文将详尽介绍Objects类中的几个核心方法及其应用场景&#xff0c;帮助你更好地驾驭Java编程。 前言…