零售交易流程相关知识(top-down拆解)
引入
关于POS机交易时的后台数据交互
模块之间数据交换,都可以能被窃取或篡改。由此引入加密、解密机制和签名、验签机制
经典的加密、解密机制:
对称加密:DES\ TDES\ AES\ RC4
非对称加密:RSA\ DSA\ ECC
经典的签名、验签机制:
MD5\ SHA1\ SH256\ RSA\ MAC(Message Authentication Code)
通常网站对注册密码只保存签名而不保存真实的密码,但MD5\ SHA1\ SH256对以字符串签名结果是确定的,所以黑客可能通过签名的结果猜出密码,所以产生了mac。MAC使用的签名方式不变,但是添加了key,则生成的签名就完全变了,那么要破解就必须先破解对应的可以,增加了破解难度。
总体加解密流程拆解
对称加密TDES\ AES, 具有运算速度快的特点,但因为对称怎存在破解的风险。需要保证加解密双方具有相同的key。
非对称加密RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
RSA具有运算速度慢,但破译风险很小的特点。加解密双方具有不相同的公钥和私钥。公钥是公开的,通常会发布到公共平台;而私钥是自己拥有,需要保密。
基于以上特点,设计通常用 非对称加密算法 传输对称加密的密钥,用 对称加密算法 对数据进行加密, 既保证了运算速度,有保证了保密性 ANS X9.24-2 Retail Financial Services Symmetric Key Management Part 2: Using Asymmetric Techniques for the Distribution of Symmetric Keys
RSA算法讲解:
公钥加密、私钥解密、私钥签名、公钥验签
如下图所示双向对称加密双方都是有三个密钥的,比如:
组织\密钥 | 支付宝公钥 | 支付宝私钥 | 商家公钥 | 商家私钥 |
支付宝平台 | 拥有 | 拥有 | 拥有(商家上传) | 没有 |
商家 | 拥有(支付宝平台下载) | 没有 | 拥有 | 拥有 |
为了让大家分清楚这四者的区别,我们用支付宝支付进行举例,但是一定要知道两个前提:
密钥是有两对,支付宝公钥和私钥,商家公钥和私钥
公钥双方都会有(包括对方的),私钥只有自己拥有自己的,不会支付宝有商家私钥或者商家有支付宝私钥
当商户向支付宝发送订单请求时:
商户是用支付宝的公钥进行数据加密,用商户的私钥进行签名。
支付宝接收数据后
支付宝可以用支付宝私钥进行数据的解密,用商户的公钥进行验签。
当支付宝异步通知商户支付结果时:
支付宝是用商户的公钥进行数据加密,用支付宝私钥进行签名。
商户接收数据后
商户就用商户的私钥进行解密,用支付宝公钥进行验签。
结合上面的图表,这样大家就应该理解了吧。实际支付宝支付都有SDK,不用你进行实质的加密加签,只要你不把密钥传错就行了,这里也是举这个例子让大家了解RSA这种加密机制的安全性。
上面对需要通过互联网情况会起到很好的保密性,当然有部分情况不需那么保密,比如工厂生成中POS机下载KEY,那么对key进行对称加密解密就行,只需遵守一定协议就行。那么美国国家标准 TR-31基于对称加密的key互操作 应运而生
asc x9 tr 31-2018 Interoperable Secure Key Exchange Key Block Specification
TR31 load key的Raw Data结构(header+DATA)
头部结构
B0144B1TX00N04000108000102080005KS18FFFF1100000000000000
数据部分TR-31图解说明
32字节的对KEY的加密值和8字节的数字指印
介绍:
B0144B1TX00N0400:写明了版本、长度、用途、加密方法等TR31密钥块分析 - 百度文库
01 08 0001 是 KeyName ,值为 0x01
02 08 0005 是 KeySlot = 0x00
KS18 FFFF1100000000000000 是 KSN值
DUKPT(Derived Unique Key Per Transaction)是被ANSI定义的一套密钥管理体系和算法,用于解决金融支付领域的信息安全传输中的密钥管理问题,应用于对称密钥加密MAC,PIN等数据安全方面。保证每一次交易流程使用唯一的密钥,采用一种不可逆的密钥转换算法,使得无法从当前交易数据信息破解上一次交易密钥。要求收单行与终端必须同步支持该项密钥管理技术。由交易发起端点(S-TRSM,如pos,ATM)与交易接收端点(R-TRSM,如收单行)两部分组成。
如此总的框架就形成了,基于上面的理论可以操作了,但是对称加密部分如TDES因为key没变化,生成的结果就不变,保密性就弱了点,那么需要更好的标准使其保密性更好。那么关于key的部分下面我们继续分解
ASN.1 TR31/TR34解析网址
KEY的保存与变更
先了解几个概念:
DUKPT是由基础密钥BDK和KSN组成,其中BDK是基础主密钥,它派生出加密安全模块的初始密钥。初始密钥和KSN一起装入加密模块,保证每个终端的主密钥都不重复。
BDK(Base Derived Key)是用于派生其他密钥的基础密钥。在金融行业和加密领域中,BDK通常是一个16字节(128位)的密钥,用于生成其他密钥,如PIN加密密钥、MAC密钥等。BDK的安全性对整个加密系统至关重要,因为它作为生成其他关键的基础。一般是一个双倍长或三倍长的T-DES密钥。
KSN(Key Serial Number)是由59bit设备标识IKSN(Initial Key Serial Number)和21bit交易次序EC(Encryption Counter)拼凑出的一种序列号。每次交易成功会加一,KSN通常与加密操作一起使用,特别是在金融交易领域,用于生成派生密钥和跟踪加密设备的使用情况。
IPEK(Initial Pin Encrypt Key)是金融领域中用于加密和解密用户个人身份号码(PIN)的密钥。IPEK通常是从BDK(Base Derivation Key)派生而来,通过一个特定的密钥派生函数生成。在金融交易中,IPEK用于保护用户的PIN,确保其传输和存储的安全性。PEK由PEK_IPEK、PEK_KSN生成
“FK” 通常指 “Future Key”。在密码学和安全领域中,“Future Key” 指代在将来某个时刻用于加密或其他安全目的的密钥。因为交易时使用的加密的KEY每次都要生成,为了减少交易的运算量,通常会预存储21个FK,交易后会更新使用过的KEY
“TK” 通常指 “Transaction Key”,在金融领域中,这是一个用于保护特定交易的密钥。与之前提到的 IPEK(Initial Pin Encrypt Key)和 BDK(Base Derivation Key)等密钥相似,TK 也可能是从 BDK 派生出来的,用于对交易数据进行加密和解密。
DEK 通常指 “Data Encryption Key”,是用于加密和解密数据的密钥。这个密钥在加密系统中用于对用户数据、文件、通信等进行加密,以确保数据的保密性。 DEK 是对称密钥,这意味着相同的密钥用于加密和解密过程。由DEK_IPEK、DEK_KSN构成,来生成加密用的DEY
HSM (Host Security Module) 用于向POS机下载PEK、DEK的设备(遵循TR31协议)
LCL-KEK (Key Encryption Key)用于下载KEY的时候,对PEK、DEK进行加密,由LCL_KEK_IPEK、LCL_KEK_KSN构成,来生成加密的KEY
所有的KSN每次交易后都会加一,用来保证每次生成的密钥不同
由以上介绍可以推理,在POS出厂前必须至少下载好LCL-KEK、 BDK、常用的CA证书(RSA使用),其他DEK、PEK、Salt、MAC等相关的key可以通过TR31或TR34交互下载,当然也可以直接下载。Salt、MAC为固定的KEY,LCL-KEK、BDK、DEK、PEK是由对应的key和ksn动态生成。
怎么验证下载的KEY为希望的KEY,也就是 KCV(Key Check Value),POS机对用KEY对一串0进行加密返回一个值,本地也做同样运算。如果结果相同则KEY正确,否则错误。KCV(Key Check Value)算法示例
POS和Acquirer Host的交易流程:交易流程很易懂的解释
初始化:Acquirer Host和POS交互相同的BDK,且POS中销毁BDK,仅保存由BDK分散出来的Initial PEK
发生交易时,POS的处理:再重复一遍,不就是上面的这些步骤么
1、 Current KSN = IKSN and EC++
2、Current PEK = PEK_Derive(Initial PEK, Current KSN) 生成密钥
3、Encrypted PIN = T-DES(Opr=Encrypt, Current PEK, Clear PIN) 加密
4、把Current KSN和Encrypted PIN放到交易报文里面,发送给Acquirer Host
收到交易时,Acquirer Host的处理:
1、 Initial PEK = PEK_Derive(BDK, KSN with EC=0)
2、Current PEK = PEK_Derive(Initial PEK, Current KSN)
3、Clear PIN = T-DES(Opr=Decrypt, Current PEK, Encrypted PIN)
4、后续交易处理
对于怎么派生新的密钥PEK_DERIVE的步骤如下图:
简要说明:
-
黄色底色的2个框框,是PEK_DERIVE的2个入参;绿色底色的框框,是PEK_DERIVE的结果
-
图中的“Set Bit”(右边KSN的黄色框框 下面的步骤),是一个很简单的步骤:
- 取KSN中最右边的21bit的EC(例如,01100000…1000,共21bit)
- 得到EC中最右侧的bit “1”(01100000…1 000)
- 将EC其余bit置为0,即获得Set Bit的结果(00000000…1 000)
https://codeload.github.com/chhil/TR31Keyblock/zip/refs/heads/main 这是java版本的,TR31Keyblock-main\src\main\java\org\keyblock\tr31\KeyHelper.java文件夹下存在类似的密钥生成代码
其他官方github上 C代码
GitHub - openemv/dukpt: ANSI X9.24 DUKPT libraries and tools
GitHub - openemv/tr31: Key block library and tools for ANSI X9.143, ASC X9 TR-31 and ISO 20038
1. ANS X9.24 Retail Financial Services Symmetric Key Management Part 1: Using Symmetric Techniques: 2004
2. ANS X9.24 Retail Financial Services Symmetric Key Management Part 2: Using Asymmetric Techniques for the Distribution of Symmetric Keys; (draft)
3. ANS X3.92 Data Encryption Algorithm (DEA)
4. ANS X9.52:1998 Triple Data Encryption Algorithm Modes of Operations
5. ISO 9797: 1999 Information technology -- Security techniques -- Message Authentication Codes (MACs) -- Part 1: Mechanisms using a block cipher
6. ISO 9797: 2011 Information technology -- Security techniques -- Message Authentication Codes (MACs) -- Part 1: Mechanisms using a block cipher
7. ANS X9 TR-39: TG 3 PIN Security Compliance Guideline
8. ANS X9 TG 7 Initial DEA Key Distribution for PIN Entry and Transaction Originating Devices Guideline
9. ISO 16609-2004, Banking – Requirements for message authentication using symmetric techniques
10. NIST SP 800-38B, Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication
11. NIST SP 800-108, Recommendation for Key Derivation Using Pseudorandom Functions.
12. FIPS 197 Advanced Encryption Standard (AES), November 26, 2001
13. FIPS 198-1 The Keyed-Hash Message Authentication Code (HMAC), July 2008
DUKPT、BDK和KSN:金融交易中的加密密钥体系详解-CSDN博客
DUKPT IPEK KSNPOS机的加密传输过程_ipek和bdk-CSDN博客
Java实现RSA工具类(加密、解密、签名、验签)_java rsa工具类-CSDN博客
DUKPT(derived unique key per Transaction)-CSDN博客
相关文章:
零售交易流程相关知识(top-down拆解)
引入 关于POS机交易时的后台数据交互 模块之间数据交换,都可以能被窃取或篡改。由此引入加密、解密机制和签名、验签机制 经典的加密、解密机制: 对称加密:DES\ TDES\ AES\ RC4 非对称加密:RSA\ DSA\ ECC 经典的签名、验签…...
在人工智能软件的帮助下学习编程实例
1 引言 本文记录在人工智能软件的帮助下学习一种全新的编程环境的实例,之所以提人工智能软件而不是单指DeepSeek,一方面DeepSeek太火了,经常服务器繁忙,用本机本地部署的最多运行70b模型,又似乎稍差。另一方面也作为一…...
C语言_数据结构总结5:顺序栈
纯C语言代码,不涉及C 想了解链式栈的实现,欢迎查看这篇文章:C语言_数据结构总结6:链式栈-CSDN博客 这里分享插入一下个人觉得很有用的习惯: 1. 就是遇到代码哪里不理解的,你就问豆包,C知道&a…...
c++ 游戏入门指南
在C++游戏开发中,你需要结合高性能编程、图形学、数学和游戏设计等多方面的知识。以下是C++游戏开发的核心步骤、工具和资源整理,帮助你从入门到进阶: 1. 开发环境搭建 编译器:MSVC(Visual Studio)、GCC、Clang。IDE:Visual Studio(Windows)、JetBrains CLion(跨平台…...
npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
1、在 vscode 终端执行 get-ExecutionPolicy 返回 Restricted 状态是禁止的 返回 RemoteSigned 状态是可正常执行npm命令 2、更改状态 set-ExecutionPolicy RemoteSigned 如果提示需要管理员权限,可加参数运行 Set-ExecutionPolicy -Scope CurrentUser RemoteSi…...
STM32项目分享:智能家居语音系统(ASRPRO版)
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: STM32智能家居语音系统(ASRPRO版&am…...
vue2实现组件库的自动按需引入,unplugin-auto-import,unplugin-vue-components
1.使用ant-design-vue或者element-ui时,如何每个组件都去import导入组件,大大降低了开发效率,如果全局一次性注册会增加项目体积,那么如何实现既不局部引入,也不全局注册? 2.在element-plus官网看到有说明…...
前端安全面试题汇总及参考答案
目录 简述 XSS 攻击的原理及三种常见类型(存储型、反射型、DOM 型) 如何在前端防御 XSS 攻击?列举编码、过滤、CSP 策略的具体实现方式 富文本编辑器场景下如何安全处理用户输入的 HTML 内容? 如何通过 HttpOnly 属性增强 Cookie 安全性?它与 XSS 防御的关系是什么? …...
《打造视频同步字幕播放网页:从0到1的技术指南》
《打造视频同步字幕播放网页:从0到1的技术指南》 为什么要制作视频同步字幕播放网页 在数字化信息飞速传播的当下,视频已然成为内容输出与获取的核心载体,其在教育、娱乐、宣传推广等诸多领域发挥着举足轻重的作用 。制作一个视频同步字幕播…...
Redis 篇
一、数据结构 二、持久化方式 Redis 提供了两种主要的持久化方式,分别是 RDB(Redis Database)和 AOF(Append Only File),此外,还可以同时使用这两种方式以增强数据安全性,以下为你…...
STM32常见外设的驱动示例和代码解析
以下是针对STM32常见外设的驱动示例和代码解析,基于HAL库实现,适用于大多数STM32系列(如F1/F4/H7等),可根据具体型号调整引脚和时钟配置。 1. GPIO驱动 应用场景:控制LED、按键检测、继电器开关等。 示例代码: // 初始化LED(推挽输出) void LED_Init(void) {GPIO_In…...
docker-compose Install reranker(fastgpt支持) GPU模式
前言BGE-重新排名器 与 embedding 模型不同,reranker 或 cross-encoder 使用 question 和 document 作为输入,直接输出相似性而不是 embedding。 为了平衡准确性和时间成本,cross-encoder 被广泛用于对其他简单模型检索到的前 k 个文档进行重新排序。 例如,使用 bge 嵌入模…...
【计算机网络入门】应用层
目录 1.网络应用模型 1.1 C/S模型(客户端服务器模型) 1.2 P2P模型(对等模型) 2. DNS系统 2.1 域名 2.2 域名解析流程 3. FTP文件传输协议 4. 电子邮件系统 4.1 SMTP协议 4.2 pop3协议 4.3 IMAP协议 4.4 基于万维网的电…...
/***************************所有笔记汇总目录***************************/
文章分类目录 STM32CubeMX 01、STM32CubeMX——定时器(普通模式和PWM模式) 02、STM32CubeMX——串口(HAL库) 03、STM32CubeMX——(uart_IAP串口)简单示例 04、STM32CubeMX——ADC采集单通道,多通道,内部…...
mysql虚拟列
目录 1. 关于虚拟列 2. 虚拟列分类 3. 虚拟列使用 3.1 创建虚拟列 3.2 为虚拟列添加索引 3.3 验证虚拟列索引是否生效 3.4 删除虚拟列 1. 关于虚拟列 MySQL 5.7 版本引入了虚拟列(也称为生成列)的功能,这是一种在物理表上定义的虚拟列…...
【瞎折腾/ragflow】构建docker镜像并部署使用ragflow
说在前面 操作系统:win11docker desktop版本:4.29.0docker engin版本:v26.0.0ragflow版本:nightly 安装docker 官网 如果是win11,backend建议使用wsl2 安装好后打开docker desktop,不然docker命令用不了 …...
Django模型数据修改:详解两种方式
Django模型数据修改:详解两种方式 在Django框架中,数据模型(Model)定义了应用的数据结构,并提供了与数据库交互的接口。数据的修改是Django开发中的常见操作之一。本文将详细介绍两种在Django中修改数据的方式&#x…...
Gradle 配置 Lombok 项目并发布到私有 Maven 仓库的完整指南
Gradle 配置 Lombok 项目并发布到私有 Maven 仓库的完整指南 在 Java 项目开发中,使用 Lombok 可以极大地减少样板代码(如 getter/setter 方法、构造器等),提高开发效率。然而,当使用 Gradle 构建工具并将项目发布到私…...
docker 常用命令教程
文章目录 docker常用命令教程1. 镜像拉取镜像删除镜像查看镜像列表 2. 容器运行容器启动容器停止容器查看容器设置容器开机自启向容器输入命令 3. 镜像传输提交容器为镜像镜像解压缩登录命令推送远程仓库(需先在主机上登录账号) docker常用命令教程 1. 镜像 拉取镜像 docker…...
机器学习编译
一、机器学习概述 1.1 什么是机器学习编译 将机器学习算法从开发形态通过变换和优化算法使其变成部署形态。即将训练好的机器学习模型应用落地,部署在特定的系统环境之中的过程。 开发形态:开发机器学习模型时使用的形态。Pytorch,TensorFlow等通用框…...
mysql中什么机制保证宕机数据恢复
MySQL 通过多种机制来保证在宕机或意外崩溃时数据的完整性和可恢复性。这些机制主要包括 事务日志、崩溃恢复 和 数据持久化 等。以下是 MySQL 中保证数据恢复的核心机制: 1. 事务日志(Transaction Log) 事务日志是 MySQL 实现数据恢复的核心机制之一,主要包括 Redo Log(…...
使用 display: flex 实现动态布局:每行两个 item,单数时最后一个占满整行
文章目录 使用 display: flex 实现动态布局:每行两个 item,单数时最后一个占满整行 🎯一、需求分析二、实现思路三、代码实现1. HTML 结构2. CSS 样式关键点解析: 四、效果演示HTML 示例:效果: 五、完整代码…...
android 支持自定义布局、线程安全、避免内存泄漏的 Toast 工具类
支持自定义布局:可以灵活地显示自定义样式的 Toast。 线程安全:确保在主线程中显示 Toast,避免崩溃。 避免内存泄漏:使用 ApplicationContext 和取消机制,防止内存泄漏问题。 工具类:作为一个通用的工具…...
密码学系列 - 利用CPU指令加速
CPU擅长的操作: AES 指令, SHA 指令为了充分利用流水线带来的好处,出现了一种叫做RISC的CPU架构。RISC是Reduced Instruction Set Computer(精简指令集)的缩写 SHA加速 Filecoin系列 - 源码分析 - CPU SHA扩展 当前的构造在某些阶段确实涉…...
什么是美颜SDK?从几何变换到深度学习驱动的美颜算法详解
美颜SDK是一种用于处理图像与视频的开发工具,能够提供磨皮、美白、瘦脸、五官优化、动态贴纸等美颜特效。它广泛应用于直播、短视频、社交、在线会议、电商等行业,帮助用户在视频或图片中实现更好的视觉呈现。 一、从几何变换到深度学习:美颜…...
用Deepseek写一个五子棋微信小程序
在当今快节奏的生活中,休闲小游戏成为了许多人放松心情的好选择。五子棋作为一款经典的策略游戏,不仅规则简单,还能锻炼思维。最近,我借助 DeepSeek 的帮助,开发了一款五子棋微信小程序。在这篇文章中,我将…...
FPGA 实验报告:四位全加器与三八译码器仿真实现
目录 安装Quartus软件 四位全加器 全加器、半加器 半加器: 全加器: 四位全加器电路图 创建项目 半加器 全加器 四位全加器 代码实现 半加器 全加器 四位全加器 三八译码器 创建项目 代码展示 modelsim仿真波形图 四位全加器 三八译码…...
Vercel Serverless
1. 引言 现代应用程序是为适应当前技术环境需求而设计的软件,采用现代开发工具和实践,针对云部署和可扩展性优化。它们由多个模块化小组件组成,便于集成和缩放,具有高度的敏捷性和适应性,能快速响应用户或业务需求变化…...
胜软科技冲刺北交所一年多转港股:由盈转亏,毛利率大幅下滑
《港湾商业观察》施子夫 近期,山东胜软科技股份有限公司(以下简称,胜软科技)递表港交所获受理,独家保荐机构为广发证券(香港)。 在赴港上市之前,胜软科技还曾谋求过A股上市&#x…...
JJJ:linux sysfs相关
文章目录 1.sysfs(属性)文件的创建、读、写1.1 创建流程1.2 open流程1.3 read流程 2.补充2.1 sysfs下常见目录介绍2.2 属性相关2.2.1 简介2.2.2 attribute文件的创建 2.3 sysfs目录如何创建的 1.sysfs(属性)文件的创建、读、写 1…...
vue3 遇到babel问题(exports is not defined) 解决方案
由于我在引用ant-design-vue插件,于是产生了下图的问题。 1.问题分析 Babel 是一个 JavaScript 编译器,主要用于:将 ES6 代码转译为 ES5 代码,以兼容旧版浏览器。处理模块化语法(如 import/export)。 2.解…...
《原型链的故事:JavaScript 对象模型的秘密》
原型链(Prototype Chain) 是 JavaScript 中实现继承的核心机制。每个对象都有一个内部属性 [[Prototype]](可以通过 __proto__ 访问),指向其原型对象。每个对象都有一个原型, 原型本身也是一个对象…...
Python怎样安装,Windows/Mac/Linux系统安装教程
Python的安装步骤如下,结合不同操作系统和关键注意事项进行说明: 一、Windows系统安装 下载安装包 访问Python官网,点击“Downloads”选择适合的版本(推荐稳定版,如3.9或3.10,避免最新版可能的不兼容问题&a…...
03.08
1. 数字三角形 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那…...
LeetCode 解题思路 11(Hot 100)
解题思路: 若相等: 直接返回 true。若当前元素大于目标值: 由于列递增,当前列下方所有元素均大于目标值,故排除该列(向左移动)。若当前元素小于目标值: 由于行递增,当前…...
使用websocket,注入依赖service的bean为null
问题:依赖注入失败,service获取不到,提示null 这是参考代码 package com.shier.ws;import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.google.gson.Gson; import com.s…...
【数据结构初阶】---堆的实现、堆排序以及文件中的TopK问题
1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点&…...
【量化策略】均值回归策略
【量化策略】均值回归策略 🚀量化软件开通 🚀量化实战教程 技术背景和应用场景 均值回归策略是一种基于统计学原理的量化交易策略,它假设资产价格会围绕其历史平均水平波动。当价格偏离这个平均水平时,就有可能会回到平均值附…...
设计模式 - 工厂模式 精准梳理精准记忆
1、代码片段 - 带入理解 一、核心模式分类 简单工厂模式(编程习惯,非 GoF 设计模式)工厂方法模式(GoF 创建型模式)抽象工厂模式(GoF 创建型模式) 二、演变过程:咖啡店案例 初始实现…...
WIFI ESP8266以及基础功能介绍
芯片一旦烧写了程序就不可以使用AT指令集,需要重新刷回AT指令库才可以使用 wifi的通信频段是2.4G免费频段。 AT指令 AT(attention)command set.AT指令集或命令集,一般称为AT指令 海斯命令集:Hayes command set 默认…...
面试java做了一道逻辑题,人麻了
题目:给你一个5升水壶,一个6升水壶,去池塘中取水,如何保证最后取出的水是3升? 思考了很久终于想出来了,这里用X5代表5升的桶,X6代表6升的桶: ① 6升桶装满,X50ÿ…...
go语言因为前端跨域导致无法访问到后端解决方案
前端服务8080访问后端8081这端口显示跨域了 ERROR Network Error AxiosError: Network Error at XMLHttpRequest.handleError (webpack-internal:///./node_modules/axios/lib/adapters/xhr.js:116:14) at Axios.request (webpack-internal:///./node_modules/axios/lib/core/A…...
svn删除所有隐藏.svn文件,文件夹脱离svn控制
新建一个文件,取名remove-svn-folders.reg,输入如下内容: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN] "Delete SVN Folders" [HKEY_LOCAL_MACHINE\SOFTWARE\Class…...
Greenplum6.19集群搭建
一,安装说明 1.1环境说明 1、首先确定部署的环境,确定下服务器的端口,一般默认是22的端口; 2、当前这份文档是服务器处于10022端口下部署的(现场生产环境要求,22端口在生产环境存在安全隐患)&…...
C/C++蓝桥杯算法真题打卡(Day4)
一、P11041 [蓝桥杯 2024 省 Java B] 报数游戏 - 洛谷 算法代码: #include<bits/stdc.h> using namespace std;// 计算第 n 个满足条件的数 long long findNthNumber(long long n) {long long low 1, high 1e18; // 二分查找范围while (low < high) {lo…...
TinyWebServer项目笔记——01 线程同步机制封装类
目录 1.基础知识 (1)RALL (2)信号量 (3)互斥量 (4)条件变量 2.功能 1.基础知识 (1)RALL RALL全称“Resource Acquisition is Initialization”…...
如何在Ubuntu上直接编译Apache Doris
以下是在 Ubuntu 22.04 上直接编译 Apache Doris 的完整流程,综合多个版本和环境的最佳实践: 注意:Ubuntu的数据盘VMware默认是20G,编译不够用,给到50G以上吧 一、环境准备 1. 安装系统依赖 # 基础构建工具链 apt i…...
算法006——和为S 的两个数
力扣——查找总价格为目标值的两个商品点击跳转 注意题目中的关键信息升序 我们利用双指针,不管 target 是多少,让一个指针指向最小值,让一个指针指向最大 那么,共有三种情况 我们首先遇到的是第二种情况 sum < target left …...
物联网设备接入系统后如何查看硬件实时数据?
要在软件中实时查看硬件设备的信息,通常需要结合前后端技术来实现。以下是设计思路和实现步骤: 1. 系统架构设计 实时查看硬件设备信息的系统通常采用以下架构: 数据采集层: 硬件设备通过传感器采集数据,发送到InfluxDB。数据存…...
CSS—属性继承与预处理器:2分钟掌握预处理器
个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–属性继承3–预处理器 2. 属性继承 像Android里面继承extends,类继承,子类可以使用父类的public和protected的属性和方法。子类可以直接用。 在CSS里面也是类似的。CSS里面是布局里面…...