当前位置: 首页 > news >正文

http数据传输确保完整性和保密性整流程方案(含源码)

在这里插入图片描述
往期文章回顾

  • 【深度学习】
    • 【深度学习】物体检测/分割/追踪/姿态估计/图像分类检测演示系统【含源码】
    • 【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示
    • 【深度学习】行人跌倒行为检测软件系统
    • 【深度学习】火灾检测软件系统
    • 【深度学习】吸烟行为检测软件系统
    • 【深度学习】数竹签演示软件系统
    • 【深度学习】菜品目标检测软件系统
  • 【爬虫】
    • 爬取A股数据写入数据库(一)
    • 爬取A股数据写入数据库(二)
    • 爬取股票历史K线数据写入数据库(三)
    • 爬取股票数据写入数据库并显示(四)
  • 【QT】
    • QT5集成FTP实现文件及文件夹的下载
    • QT集成开源日志库示例
  • 【Python源码加密】
    • python源码加密之Cython方案简单示例
    • Cython针对python工程多层级目录处理办法
  • 【数据安全】
    • http服务网络请求如何确保数据安全(含python示例源码)
    • http数据传输确保完整性和保密性全整流程方案(含源码)

1. 本文摘要

  • 当今数据安全越来越重要,http网络请求数据安全加强要求是为了保护公民的隐私和数据安全,防范日益复杂的网络攻击,确保电子商务和在线服务的可靠性,并遵守相关法律法规。
  • 上一篇文章中,结合我参与的项目,粗略描述了在http网络请求中如何做到数据安全,并附了一些源码
  • 本文主要介绍"http请求中数据传输的完整性和传输过程中数据的保密性",这部分如何快速融入到已有的工程中,包括中间件转发,这样就可以无缝的连接到原来的项目中。
  • 本文仍然使用python flask来演示整个过程,并详细描述了这个过程的设计流程。
    本系统所涉及的源码已打包上传。
    文中源码文件【获取方式】:关注公众号:利哥AI实例探险
    给公众号发送 “http传输安全保密” 获取下载方式
    注意发送的关键词不能错,否则匹配不到对应资源,由于本人能力有限,难免有疏漏之处。

2. 项目中经常遇到的问题及处理办法

  1. http协议数据传输,需采用校验码技术或密码技术保证重要数据在传输过程中的完整性。
  2. 鉴别信息及重要业务数据采用经国家密码主管部门认可的密码技术,保证其在传输过程中数据的保密性。

**数据的保密性:**使用国家密码管理局认可的对称加密算法(如AES)来确保数据的保密性
**数据的完整性:**可以使用HMAC(哈希消息认证码)来确保数据在传输过程中的完整性

**AES(Advanced Encryption Standard,高级加密标准)**是一种对称加密算法,用于保护数据的安全。它被广泛应用于各种数据加密场景,包括文件加密、网络通信加密等。AES以其高效性和强大的安全性成为现代数据加密的主流选择。
**哈希消息认证码(HMAC)**是一种用于验证消息完整性和真实性的技术。它结合了哈希函数和密钥,确保消息在传输过程中未被篡改。

3. 处理的问题及处理的流程

  1. 请求、接收双方共用aes key及hmac key。
  2. 请求方在发送请求时,对发送的原始数据进行aes加密,并计算哈希值
  3. 接收方在接到数据后,进行哈希值验证,以确保数据完整性,之后进行aes解密处理
  4. 接收方根据解密后的数据进行各种业务处理,在返回给请求方时,将返回数据进行aes加密,并计算哈希值
  5. 请求方在接收到请求返回时,进行哈希验证并进行aes解密,并进行业务处理
    在这里插入图片描述

4. 示例代码拆解

4.1 AES加解密

文章末尾会附带全部源码,以下为讲解
加密函数:

  • 输入:需要加密的原始数据字符串、aes key、随机生成的iv
  • 输出:加密后的数据串、随机生成的iv(供数据发送给接收方进行解密使用)

解密函数:

  • 输入:加密后的数据字符串、aes key、加密时的iv
  • 输出:解密后的原始数据
def generate_iv_16str() -> str:# 生成一个16字符长度的字符串作为IVreturn ''.join(random.choices(string.ascii_letters + string.digits, k=BLOCK_SIZE))def encrypt_aes_str(plaintext, key, iv_str) -> Tuple[str, str]:# 将IV字符串转换为字节iv = iv_str.encode('utf-8')# 创建AES对象cipher = AES.new(key, AES.MODE_CBC, iv)# 加密并进行填充ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), BLOCK_SIZE))# 将密文进行Base64编码encrypted_data = base64.b64encode(ciphertext).decode('utf-8')return encrypted_data, iv_strdef decrypt_aes_str(ciphertext: str, key: str, iv_str: str) -> str:# 将IV字符串转换为字节iv = iv_str.encode('utf-8')# 将密文解码为字节数组ciphertext = base64.b64decode(ciphertext)# 创建AES对象cipher = AES.new(key, AES.MODE_CBC, iv)# 解密并去除填充plaintext = unpad(cipher.decrypt(ciphertext), BLOCK_SIZE)return plaintextif __name__ == '__main__':# 加密数据response_json = {"msg": "hello world"}data_str = json.dumps(response_json)# 加密encrypted_data, iv_str = encrypt_aes_str(data_str, SECRET_KEY, generate_iv_16str())# 解密body_str = decrypt_aes_str(encrypted_data, SECRET_KEY, iv_str)

4.2 哈希验证码生成

输入:加密后的字符串
输出:哈希验证码

# HMAC生成函数
def generate_hmac(data: str) -> str:return hmac.new(HMAC_KEY, data.encode('utf-8'), hashlib.sha256).hexdigest()

4.3 中间件处理

中间件前置处理函数:

  • 在中间件中解析数据,做数据完整性的哈希码认证
  • 在中间件中根据iv解析aes加密后的数据,再将这部分数据写入到中间件,供视图函数使用
  • 在视图函数中,进行业务处理
app = Flask(__name__)
app.before_request(before_request_func)
app.after_request(after_request_func)def before_request_func():url_method = request.method.upper()url_str = request.urlip_address = request.remote_addrif 'OPTIONS' == url_method:return Noneif 'GET' == url_method:return Noneif 'POST' != url_method:return None    requestData = request.get_json()recv_iv = requestData.get('vector')recv_hmac = requestData.get('code')recv_data = requestData.get('data')body_str = decrypt_aes_str(recv_data, SECRET_KEY, recv_iv)# 验证HMACcalculate_hmac = generate_hmac(recv_data)if not hmac.compare_digest(calculate_hmac, recv_hmac):# 哈希消息验证码校验失败return jsonify({'error': 'HMAC verification failed'}), 400# 将修改后的数据重新赋值给request.datarequest._cached_data = body_strreturn None

中间件后置处理函数:

  • 视图函数处理完业务逻辑后,会将返回结果返回到中间件
  • 中间件需要对返回数据进行加密,再带上iv进行返回
app = Flask(__name__)
app.before_request(before_request_func)
app.after_request(after_request_func)def after_request_func(response):url_str = request.urlurl_method = request.method.upper()if 'OPTIONS' == url_method:return responseelif 'GET' == url_method:passelif 'POST' == url_method:pass    response_json = response.get_json()# 加密数据data_str = json.dumps(response_json)encrypted_data, iv_str = encrypt_aes_str(data_str, SECRET_KEY, generate_iv_16str())# 生成HMAChmac_value = generate_hmac(encrypted_data)response_data = {'vector': iv_str,'data': encrypted_data,'code': hmac_value}response.data = json.dumps(response_data)response.mimetype = 'application/json'return response

5. 整体代码示例及逻辑

5.1 整体源码

from flask import Flask, request, jsonify
import hmac, hashlib, base64, json, string, random
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from typing import Tuple
app = Flask(__name__)
'''
AESCBC、BLOCK_SIZE=16、PKCS7填充使用Crypto.Util.Padding中的pad和unpad函数进行PKCS7填充和去填充。这里使用块大小BLOCK_SIZE(16字节, 即128位)进行填充。偏移量 (IV) 的长度是有要求的。对于AES (高级加密标准) 来说, IV的长度必须与AES的块大小相同, 这意味着IV的长度必须是16字节(128位),因为AES的块大小是128位。
'''
# 配置参数
# 共享密钥和HMAC密钥
SECRET_KEY = b'synjones2024zhc1'  # 16字节,即128位密钥  确保是16个字符, 避免引起不必要的异常
HMAC_KEY = b'synjones2024zhc2'  # 16字节,即128位HMAC密钥
BLOCK_SIZE = 16def generate_iv_16str() -> str:# 生成一个16字符长度的字符串作为IVreturn ''.join(random.choices(string.ascii_letters + string.digits, k=BLOCK_SIZE))def encrypt_aes_str(plaintext: str, key: str, iv_str: str) -> Tuple[str, str]:# 将IV字符串转换为字节iv = iv_str.encode('utf-8')# 创建AES对象cipher = AES.new(key, AES.MODE_CBC, iv)# 加密并进行填充ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), BLOCK_SIZE))# 将密文进行Base64编码encrypted_data = base64.b64encode(ciphertext).decode('utf-8')return encrypted_data, iv_strdef decrypt_aes_str(ciphertext: str, key: str, iv_str: str) -> str:# 将IV字符串转换为字节iv = iv_str.encode('utf-8')# 将密文解码为字节数组ciphertext = base64.b64decode(ciphertext)# 创建AES对象cipher = AES.new(key, AES.MODE_CBC, iv)# 解密并去除填充plaintext = unpad(cipher.decrypt(ciphertext), BLOCK_SIZE)return plaintext# HMAC生成函数
def generate_hmac(data: str) -> str:return hmac.new(HMAC_KEY, data.encode('utf-8'), hashlib.sha256).hexdigest()# 定义中间件处理请求数据
def before_request_func():url_method = request.method.upper()url_str = request.urlip_address = request.remote_addrprint(f'---------------------------------(starting:)server receive, method={url_method}, url={url_str}, remote_addr={ip_address}')if 'OPTIONS' == url_method:return Noneif 'GET' == url_method:return Noneif 'POST' != url_method:return None# 不需要任何验证的请求if url_str.find("/send") > 0 \or url_str.find("/receive") > 0 \or url_str.find("/login") > 0:return NonerequestData = request.get_json()recv_iv = requestData.get('vector')recv_hmac = requestData.get('code')recv_data = requestData.get('data')body_str = decrypt_aes_str(recv_data, SECRET_KEY, recv_iv)print('-------------body_str=', body_str)# 验证HMAC# calculate_hmac = generate_hmac(recv_data)# if not hmac.compare_digest(calculate_hmac, recv_hmac):#     # 哈希消息验证码校验失败#     return jsonify({'error': 'HMAC verification failed'}), 400# 将修改后的数据重新赋值给request.datarequest._cached_data = body_strreturn None# 定义中间件处理响应数据
def after_request_func(response):url_str = request.urlurl_method = request.method.upper()if 'OPTIONS' == url_method:return responseelif 'GET' == url_method:passelif 'POST' == url_method:pass# 不需要任何验证的请求if url_str.find("/send") > 0 \or url_str.find("/receive") > 0 \or url_str.find("/login") > 0:return responseresponse_json = response.get_json()# 加密数据data_str = json.dumps(response_json)encrypted_data, iv_str = encrypt_aes_str(data_str, SECRET_KEY, generate_iv_16str())# 生成HMAChmac_value = generate_hmac(encrypted_data)response_data = {'vector': iv_str,'data': encrypted_data,'code': hmac_value}response.data = json.dumps(response_data)response.mimetype = 'application/json'return responseapp.before_request(before_request_func)
app.after_request(after_request_func)# 对json数据进行aes加密,并生成hmac
@app.route('/send', methods=['POST'])
def send_data():content = request.jsondata_str = json.dumps(content) # 将JSON对象序列化为字符串# 加密数据encrypted_data, iv_str = encrypt_aes_str(data_str, SECRET_KEY, generate_iv_16str())# 生成HMAChmac_value = generate_hmac(encrypted_data)response = {'vector': iv_str,'data': encrypted_data,'code': hmac_value}return jsonify(response)# 对aes加密的数据进行hmac验证,并解析aes加密的数据
@app.route('/receive', methods=['POST'])
def receive_data():content = request.jsoniv = content.get('vector')encrypted_data = content.get('data')received_hmac = content.get('code')# 验证HMACexpected_hmac = generate_hmac(encrypted_data)if not hmac.compare_digest(expected_hmac, received_hmac):return jsonify({'error': 'HMAC verification failed'}), 400# 解密数据decrypted_data_str = decrypt_aes_str(encrypted_data, SECRET_KEY, iv)if decrypted_data_str is None:return jsonify({'error': 'Decryption failed'}), 400# 将解密后的字符串反序列化为JSON对象decrypted_data = json.loads(decrypted_data_str)return jsonify({'data': decrypted_data})@app.route('/encrypt', methods=['POST'])
def encrypt():j_data = json.loads(request.data)print('-------------路由接收:', j_data)return jsonify(j_data)if __name__ == '__main__':app.run(host='0.0.0.0', port=5000, debug=True)

5.2 源码接口

  1. 对json进行加密(为了单独测试加密)
    在这里插入图片描述

  2. 对加密数据进行解析(为了单独测试解密)

在这里插入图片描述
3. 使用中间件流程(对应整体流程),即流程设计图中的流程,此接口是可以提供给请求端调用的接口
在这里插入图片描述

如果您觉得我分享的这些对您有用,请点击原文,关注我吧

原文地址:http数据传输确保完整性和保密性整流程方案(含源码)

相关文章:

http数据传输确保完整性和保密性整流程方案(含源码)

往期文章回顾 【深度学习】 【深度学习】物体检测/分割/追踪/姿态估计/图像分类检测演示系统【含源码】【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示【深度学习】行人跌倒行为检测软件系统【深度学习】火灾检测软件系统【深度学习】吸烟行为检测软件系统【深度…...

UE插件与云渲染:10个提升效率的选择

Unreal Engine(虚幻引擎)的插件生态丰富多样,从提升视觉效果到优化工作流程,为开发者提供了无限扩展的可能。本文推荐10款备受欢迎的插件,助你激发创意,提升开发效率. 一、地牢建筑师:程序化关…...

[Shell编程学习路线]——shell脚本中case语句多分支选择详解

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月21日16点30分 🀄️文章质量:95分 ————前言———— 在Shell编程中,处理多种条件…...

Django REST Framework(四)DRF Serializer

作用: 1. 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 2. 反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型 3. 反序列化,完成数据校验功能 定义序列化器 Django REST framework中的Serializer使用类来定义&a…...

【C语言】bool 关键字

在C语言中,bool类型用于表示布尔值,即真或假。C语言本身在标准库中并未提供布尔类型,直到C99标准引入了stdbool.h头文件。该头文件定义了bool类型,以及两个常量:true和false。在此之前,通常使用整数来表示布…...

开发电商ERP系统需要接入哪些平台API?

跟随全渠道发展趋势,很多实体商家开设电商店铺,为消费者提供便捷的购物体验,增强消费者的满意度,同时也提升了企业自身的市场竞争力。为了满足商家业务拓展需求,很多原本主要服务于实体商贸企业的ERP服务商&#xff0c…...

Meet AI4S 直播预告丨房价分析新思路:神经网络直击复杂地理环境中的空间异质性

近年来,房地产市场起起落落,房价已经成为了扰动居民幸福感的重要影响因素。大多数家庭都需要面对「买不买房、何时买房、在哪儿买房、买什么房」的艰难抉择,每一个问题的答案都在某种程度上与房价的波动息息相关。 近年来,我国各…...

支持向量机(SVM)在机器学习中的简单示例

目录 工作原理 核函数 SVM用于分类 结果分析 结论 ❤❤❤动动发财的小手点点赞点点关注哦~~~❤❤❤ 支持向量机是一种强大的监督学习模型,用于分类和回归任务。它通过找到数据点之间的最优边界来区分不同的类别。SVM特别适用于那些具有清晰边界但线性不可分的…...

使用Anaconda虚拟环境安装Opencv、pytorch、torchvision踩坑记录

电脑 python 环境版本过高与下载Opencv(3.4以下)不匹配,因为版本过高部分算法收米, 从而在虚拟环境重新下载python老版本 本文默认您的电脑上已经安装了Anaconda 我是按照这位博文安装的 安装Opencv (详解)安装3.4.1.15版本…...

【人工智能】CPU、GPU与TPU:人工智能领域的核心处理器概述

在人工智能和计算技术的快速发展中,CPU(中央处理器)、GPU(图形处理器)和TPU(张量处理器)作为核心处理器,各自扮演着不可或缺的角色。它们不仅在性能上各有千秋,还在不同的…...

【康复学习--LeetCode每日一题】3099. 哈沙德数

题目: 如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数 x 。如果 x 是 哈沙德数 ,则返回 x 各个数位上的数字之和,否则,返回 -1 。 示例 1&a…...

docker使用jdk21启动jar包报错

[0.007s][warning][os,thread] Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached. [0.007s][error ][gc,task ] Failed to create worker thread解决办法 1 (使用doc…...

Object 类中的公共方法详解

Object 类中的公共方法详解 1、clone() 方法2、equals(Object obj) 方法3、hashCode() 方法4、getClass() 方法5、wait() 方法6、notify() 和 notifyAll() 方法 💖The Begin💖点点关注,收藏不迷路💖 在 Java 中,Object…...

python 字典 一个key 多 value 遍历

在Python中,如果一个键对应多个值,你需要确保这些值被存储在一个容器类型(如列表或集合)中。你可以使用默认字典(collections.defaultdict)来简化这个过程。以下是一个示例代码: from collecti…...

vue---基本原理(二)

1、slot的基础理解 slot又名插槽,是vue的内容分发机制,组件内部的模板引擎使用slot元素作为承载分发的出口。是子组件的一个模板标签元素,而这一个标签元素是否显示,以及怎么显示,是由父元素控制的。slot又分为默认插槽…...

桂花网蓝牙网关X1000:引领物联网新时代的智能连接

在物联网技术飞速发展的今天,蓝牙网关作为连接蓝牙设备与互联网的关键设备,其性能与稳定性直接影响到物联网系统的整体运行效果。桂花网蓝牙网关X1000凭借其卓越的性能和广泛的应用场景,成为了物联网领域的佼佼者。 一、产品概述 桂花网蓝牙…...

JAVA案例模拟电影信息系统

一案例要求: 二具体代码(需要在同一个包下创建三个类) Ⅰ:实现类 package 重修;import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {javabean[]moviesnew javabean[4];movies[0] new ja…...

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务10:Hive安装部署

任务描述 任务内容为安装并配置在Hadoop集群中使用Hive。 任务指导 Hive是一个基于Hadoop的数据仓库框架,在实际使用时需要将元数据存储在数据库中 具体安装步骤如下: 1. 安装MySQL数据库(已安装) 2. 解压缩Hive的压缩包 3…...

第一百四十二节 Java数据类型教程 - Java字符数据类型

Java数据类型教程 - Java字符数据类型 Character类的一个对象包装一个char值。 字符类包含isLetter()和isDigit()方法来检查字符是否为字母和数字。 toUpperCase()和toLowerCase()方法将字符转换为大写和小写。 该类提供了一个构造函数和一个工厂valueOf()方法来从char创建对…...

AI 绘画的常用技巧和操作方法

随着人工智能技术的飞速发展,AI 绘画已经成为设计和艺术领域的一股新兴力量。无论是设计师、艺术家,还是普通的科技爱好者,都能通过 AI 绘画工具创造出令人惊叹的作品。 AI 绘画的基本原理 AI 绘画的核心在于机器学习算法。通过训练大量的图像…...

Kafka入门到精通(四)-SpringBoot+Kafka

一丶IDEA创建一个空项目 二丶添加相关依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springf…...

起飞,纯本地实时语音转文字!

简介 偶然在 github 上翻到了这个项目 https://github.com/k2-fsa/sherpa-ncnn 在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持 iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 也就是说语音转文字可以不再借助网络服务的接口&am…...

SQL面试题练习 —— 找出所有连续未登录5天及以上的用户并提取出这些用户最近一次登录的日期

目录 1 题目2 建表语句3 题解 1 题目 找出所有连续未登录5天及以上的用户并提取出这些用户最近一次登录的日期 样例数据 ----------------------------------------------- | user_login.user_id | user_login.login_date | ---------------------------------------------…...

微深节能 煤码头自动化翻堆及取料集控系统 格雷母线

微深节能格雷母线高精度位移测量系统是一种先进的工业自动化位置检测解决方案&#xff0c;它被广泛应用于煤码头自动化翻堆及取料集控系统中&#xff0c;以实现对斗轮堆取料机等大型机械设备的精准定位和自动化控制。 系统原理简述&#xff1a; 格雷母线系统的工作原理基于电磁…...

CSS 背景添加白色小圆点样式

css也是开发过程中不可忽视的技巧 此专栏用来纪录不常见优化页面样式的css代码 效果图: 未添加之前: 代码: background: radial-gradient(circle at 1px 1px, #3d3c3c 2px, transparent 0);background-size: 20px 25px;...

【HTML入门】第一课 - 网页标签框架

这一节&#xff0c;我们说一下学习前端开发的话&#xff0c;最入门的也是非常重要的一门可成&#xff0c;也就是HTML。HTML标签&#xff0c;是网页的重要组成部分&#xff0c;可以说&#xff0c;你看到网页上的内容&#xff0c;都是基于HTML标签呈现出来的。 这一小节呢&#…...

【DevOps】Elasticsearch集群JVM参数调整及滚动重启指南

目录 概述 准备工作 滚动重启步骤 1. 禁用分片分配&#xff08;可选&#xff09; 2. 关闭索引写操作 3. 检查集群状态 4. 重启Master节点 5. 重启Data节点 6. 重新开启索引写操作 7. 启用分片分配&#xff08;如果之前禁用了&#xff09; 8. 监控集群状态 结论 概述…...

软设之多态

在面向对象的语言中&#xff0c;多态就是相同方法&#xff0c;不同的表现。 重写和重载时多态具体的表现形式。 重载&#xff0c;举个例子&#xff0c;有一个猫类&#xff0c;定义了一个叫的方法&#xff0c;正常叫的值是“喵喵”&#xff0c;愤怒时叫的值是“喵呜” 重写&a…...

SD NAND时序解析

一、SD NAND时序的重要性 在SD NAND的数据传输过程中&#xff0c;时序起着至关重要的作用。正确的时序确保了数据能够准确无误地在主机和SD NAND之间传输。 二、命令与读写时序 SD NAND的通信基于命令和数据传输&#xff0c;遵循以下时序规则&#xff1a; 命令与响应交互&…...

CSS-实例-div 水平居中 垂直靠上

1 需求 2 语法 3 示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格水平居中、垂直靠上示例…...

数据分析入门指南:从基础概念到实际应用(一)

随着数字化时代的来临&#xff0c;数据分析在企业的日常运营中扮演着越来越重要的角色。从感知型企业到数据应用系统的演进&#xff0c;数据驱动的业务、智能优化的业务以及数智化转型成为了企业追求的目标。在这一过程中&#xff0c;数据分析不仅是技术的运用&#xff0c;更是…...

ArcGIS Pro三维空间分析、专题制图、遥感制图全流程系统教学

ESRI宣布&#xff1a;ArcGIS 10.8.2 是 ArcMap 的当前版本&#xff0c;在 2026 年 3 月 1 日之前将继续受支持。我们没有计划在 2021/22 年随 ArcGIS 版本一起发布 ArcMap 10.9.x。这意味着 10.8.x 系列将是 ArcMap 的最终版本系列&#xff0c;并将在 2026 年 3 月 1 日之前受支…...

Redis 7.x 系列【17】四种持久化策略

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一&#xff1a;…...

开发经验:go切片的继承

package main import ( "errors" "fmt" ) // LimitedSlice 是一个封装了切片的结构体&#xff0c;用于限制切片的最大容量 type LimitedSlice struct { slice []int maxCap int } // NewLimitedSlice 创建一个新的LimitedSlice实例&#xff…...

PyQt5事件机制解析:从原理到实战一网打尽!

PyQt5事件机制 一、简介1.1 PyQt5的概述和作用 1.2 为什么学习PyQt5事件机制1.2.1 实现用户交互1.2.2 处理复杂逻辑1.2.3 自定义用户界面行为1.2.4 优化性能 二、PyQt5事件机制初步了解2.1 PyQt5事件的概念和基本原理2.1.1 PyQt5事件的概念2.1.2 PyQt5事件的基本原理 2.2 事件处…...

GraphQL与RESTful API的区别和优势

GraphQL GraphQL是一种用于API设计的语言和查询协议&#xff0c;由Facebook于2015年推出。它允许客户端向服务器指定他们需要的数据字段&#xff0c;而不是像RESTful API那样请求整个资源然后过滤数据。在GraphQL中&#xff0c;客户端发送一个单一的请求&#xff0c;而服务器返…...

关于 Qt4Qt5迁移至Qt6出现QDesktopWidget和QApplication::desktop()删除后兼容Qt6 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140036861 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

【HarmonyOS NEXT】鸿蒙Socket 连接

简介 Socket 连接主要是通过 Socket 进行数据传输&#xff0c;支持 TCP/UDP/Multicast/TLS 协议。 基本概念 Socket&#xff1a;套接字&#xff0c;就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。TCP&#xff1a;传输控制协议(Transmission Control Proto…...

1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot在线维修预约服务应用系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发 &#xff09;&#xff0c;系统具有完整的源代码和…...

【vue】实现自动轮播+滚轮控制

前言 有一个无缝轮播+滚轮控制的需求,找了很多的方法发现都没办法完美的实现这种效果。 用原生的js实现不是无缝滚动 用无缝滚动插件实现,发现pc端无法实现滚轮控制 目标 1 实现表格表无缝循环滚动 2 实现滚轮控制表格表数据滚动 3 掌握vue-seamless-scroll使用方式 一些思考…...

鸿翼FEX文件安全交换系统,打造安全高效的文件摆渡“绿色通道”

随着数字经济时代的到来&#xff0c;数据已成为最有价值的生产要素&#xff0c;是企业的重要资产之一。随着数据流动性的增强&#xff0c;数据安全问题也随之突显。尤其是政务、金融、医疗和制造业等关键领域组织和中大型企业&#xff0c;面临着如何在保障数据安全的同时&#…...

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活

在如今多元的数字时代&#xff0c;我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说&#xff0c;有时候需要在自己的电脑上安装 Windows 操作系统&#xff0c;以体验更多软件及功能&#xff0c;而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…...

昇思25天学习打卡营第11天|基于MindSpore通过GPT实现情感分类

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninsta…...

【Python】变量与基本数据类型

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言变量声明变量变量的命名规则 变量赋值多个变量赋值 标准数据类型变量的使用方式存储和访问数据&#xff1a;参与逻辑运算和数学运算在函数间传递数据构建复杂的数据结构 NameE…...

Unity按键表大全

Unity键值对应表# KeyCode是由Event.keyCode返回的。这些直接映射到键盘上的物理键&#xff0c;以下是键值对应列表&#xff1a; 常用键# Backspace 退格键 Delete Delete键 TabTab键 Clear Clear键 Return 回车键 Pause 暂停键 Escape ESC键 Space 空格键 小键盘# …...

第一周java。2

方法的作用 将重复的代码包装起来&#xff0c;写成方法&#xff0c;提高代码的复用性。 方法的语法 方法的语法格式如下 : [修饰符] 方法返回值类型 方法名(形参列表) { //由零条到多条可执行性语句组成的方法体return 返回值; } 定义方法语法格式的详细说明如下&#xf…...

Arduino - Keypad 键盘

Arduino - Keypad Arduino - Keypad The keypad is widely used in many devices such as door lock, ATM, calculator… 键盘广泛应用于门锁、ATM、计算器等多种设备中。 In this tutorial, we will learn: 在本教程中&#xff0c;我们将学习&#xff1a; How to use key…...

国产芯片方案/蓝牙咖啡电子秤方案研发

咖啡电子秤芯片方案精确值可做到分度值0.1g的精准称重,并带有过载提示、自动归零、去皮称重、压低报警等功能&#xff0c;工作电压在2.4V~3.6V之间&#xff0c;满足于咖啡电子秤的电压使用。同时咖啡电子秤PCBA设计可支持四个单位显示&#xff0c;分别为&#xff1a;g、lb、oz、…...

reactjs18 中使用@reduxjs/toolkit同步异步数据的使用

react18 中使用reduxjs/toolkit 1.安装依赖包 yarn add reduxjs/toolkit react-redux2.创建 store 根目录下面创建 store 文件夹&#xff0c;然后创建 index.js 文件。 import { configureStore } from "reduxjs/toolkit"; import { counterReducer } from "…...

剧本杀小程序:助力商家发展,提高游戏体验

近几年&#xff0c;剧本杀游戏已经成为了当下年轻人娱乐的游戏社交方式。与其他游戏相比&#xff0c;剧本杀游戏具有强大的社交性&#xff0c;玩家在游戏中既可以推理玩游戏&#xff0c;也可以与其他玩家交流互动&#xff0c;提高玩家的游戏体验感。 随着互联网的发展&#xf…...

Spring Boot手写starter

目录 1.介绍1.1 什么是 Starter 机制&#xff1f;1.2 Starter 机制的工作原理&#xff1f; 2.starter自定义2.1 新建工程2.2 自定义注解2.3 创建增强类2.4 创建自动配置类2.5 配置自动配置2.6 测试 1.介绍 1.1 什么是 Starter 机制&#xff1f; Starter 机制是 Spring Boot 提…...

大数据处理利器:Apache Spark编程基础与实战

"大数据处理利器&#xff1a;Apache Spark编程基础与实战" 是一个涵盖了Apache Spark这一强大大数据处理框架的深入学习和实践指南。Apache Spark是一个快速、通用、可扩展的大数据处理引擎&#xff0c;它提供了高级别的API用于大规模数据处理和分析。下面&#xff0…...

“深入解析:YUM仓库、RPM包与源码编译——Linux软件安装方式全面对比“

目录 YUM 仓库安装 概念&#xff1a; 优点&#xff1a; 缺点&#xff1a; RPM 包安装 概念&#xff1a; 优点&#xff1a; 缺点&#xff1a; 源码编译安装 概念&#xff1a; 优点&#xff1a; 缺点&#xff1a; 三者区别 YUM 仓库安装 概念&#xff1a; YUM&…...

关于用户咨询华为擎云L410笔记本安装Windows系统的说明

同样也是单位购买的华为擎云L410 KLVU-WDU0笔记本电脑&#xff0c;国产UOS系统某些软件用着不是很方便&#xff0c;用户咨询是否能够安装Windows10或者Windows7&#xff1f; 带着种种疑问也做了一些查询&#xff0c;之前也给一些国产设备更改过操作系统&#xff0c;之前的国产设…...

Spring Security6.3.0版本出现无法解析符号

Spring Security 6.3.0版本出现“无法解析的符号”错误通常意味着项目中缺少了必要的类或者资源&#xff0c;或者可能是因为项目的依赖关系配置不正确。 解决方法&#xff1a; 确认依赖&#xff1a;检查pom.xml或build.gradle文件中是否正确添加了Spring Security的依赖&…...

vue3【实战】来回拖拽放置图片

效果预览 技术要点 img 标签默认就是可拖拽的&#xff08;a 标签也是&#xff09;事件 e 内的 dataTransfer 对象可用于临时存储事件过程中的数据拖拽事件的默认行为是用浏览器新开页签打开被拖拽对象&#xff0c;所以通常需要禁用默认的浏览器行为被拖拽元素必须设置 id&#…...

7.2秒!大众途昂尊荣四驱高速极限测试

大众途昂高速极限测试。你想知道大众途昂尊荣四驱在高速上的极限速度吗?今天来进行一场高速极限测试。动力方面搭载一台2.5TV6发动机,最大马力为299匹,最大扭矩为500牛米,官方百公里加速时间为7.2秒。大众途昂尊荣四驱是一款以性能出色、操控稳定而著称的SUV车型,无论是越…...

深圳建设“超充之城”提速

五分钟的时间可以做什么?也许只是白领喝一杯咖啡的时间,但在深圳,能给新能源汽车续航200公里。在深圳的超充站,“一杯咖啡,满电出发”的标语十分醒目。深圳随处可见的超充标语近日,记者从深圳市发展改革委获悉,截至5月17日,深圳累计建成超充站378座。深圳“超充之城”建…...

C#压缩单个文件

1、压缩方法 /// <summary> /// 压缩 /// </summary> /// <param name"source">源目录</param> /// <param name"s">ZipOutputStream对象</param> public static void Compress(string source, ZipOutputStream s) {…...

MFC CList<CRect, CRect> m_listRect;的用法

CList<CRect, CRect&> 是 MFC&#xff08;Microsoft Foundation Classes&#xff09;中定义的一个双向链表模板类&#xff0c;用于存储 CRect 对象。在使用 CList 时&#xff0c;你可以执行多种操作&#xff0c;比如添加、移除、查找和遍历元素。以下是一些常见的用法…...

哈工大机器人竞技队成立22年来4次获国际冠军

另获得中国冠/亚/季军13次、国家级科技奖励60余次、省级科技竞赛奖励50余次、多次获得“最佳技术奖”。早在2009年就力克群雄获得唯一一张亚太大学生机器人大赛的入场卷&#xff0c;代表中国在东京5场全胜获得冠军。 2013届队员王永锟填报高考志愿时&#xff0c;恰巧看到哈工大…...

小红书-社区搜索部 (NLP、CV算法实习生) 一面面经

😄 整个流程按如下问题展开,用时60min左右面试官人挺好,前半部分问问题,后半部分coding一道题。 各位有什么问题可以直接评论区留言,24小时内必回信息,放心~ 文章目录 1、自我介绍2、介绍下项目:微信-多模态小视频分类2.1、看你用了cross-att来融合多模态信息,cross…...