Unity中数据和资源加密(异或加密,AES加密,MD5加密)

在项目开发中,始终会涉及到的一个问题,就是信息安全,在调用接口,或者加载的资源,都会涉及安全问题,因此就出现了各种各样的加密方式。

常见的也是目前用的最广的加密方式,分别是:DES、3DES、AES、MD5、XOR(异或)

其中DES、3DES、AES、MD5用在数据加密中偏多,特别是接口调用数据信息传输上。

XOR异或加密用在资源加密上偏多。

因此很多工程师会整理一个通用的加密工具类,因此我这边也同样整理了一个工具脚本。

但DES和3DES之前项目中没用到过,因此还没整理,等后续如果有碰到会再更新。

下面主要是AES、MD5、XOR加密方式

1、XOR(异或加密)

异或加密其实很简单,就是将二进制明文数据进行异或运算,解密时,只需要对密文再次异或运算即可。异或运算原理是,相同为 0,不同为 1

因此加密代码和解密代码一致,但是根据密钥可以是 单个byte,或者 多个byte,这就导致出现了,更复杂的加密方式,例如对明文数据索引的取余等等。当索引满足什么条件时进行加密,不满足时不进行加密。

例如下方代码

/// <summary>
/// 异或操作
/// </summary>
/// <param name="data"></param>
/// <param name="key"></param>
/// <returns></returns>
public static byte[] XorCipher(byte[] data, byte key = XorDefaultPassword)
{for (int i = 0; i < data.Length; i++){data[i] ^= key;}return data;
}/// <summary>
/// 异或操作
/// </summary>
/// <param name="data"> 数据 </param>
/// <param name="key"> 密钥 </param>
/// <param name="isRemainder"> 是否取余(数据索引,对key长度取余,不等于0时加密) </param>
/// <returns></returns>
public static byte[] XorCipher(byte[] data, byte[] key=null,bool isRemainder = true)
{if (key == null || key.Length <= 0) key = XorArrayPassword;for (int i = 0; i < data.Length; i++){if (!isRemainder){data[i] ^= key[i % key.Length];}else{if (i % key.Length != 0){data[i] ^= key[i % key.Length];}}}return data;
}

2、MD5加密

MD5码是个很常见的东西,特别是在做资源热更新的,很多公司会对给资源文件一个MD5编码,用作版本管理,判断这个编码是否一致,一致就不更新,不一致就更新资源。但这个编码的计算方式也可以用来做数据的加密。

        /// <summary> /// 加密数据 /// </summary> /// <param name="content"></param> /// <param name="key"></param> /// <returns></returns> public static string EncryptByMD5(string content, string key = DefaultPassword){var des = System.Security.Cryptography.DES.Create();byte[] inputByteArray;inputByteArray = System.Text.Encoding.Default.GetBytes(content);System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(System.BitConverter.ToString(md5.ComputeHash(System.Text.Encoding.Default.GetBytes(key + "md5"))).Replace("-", null).Substring(0, 8));des.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(System.BitConverter.ToString(md5.ComputeHash(System.Text.Encoding.Default.GetBytes(key + "md5"))).Replace("-", null).Substring(0, 8));System.IO.MemoryStream ms = new System.IO.MemoryStream();System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(ms, des.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();System.Text.StringBuilder ret = new System.Text.StringBuilder();foreach (byte b in ms.ToArray()){ret.AppendFormat("{0:X2}", b);}return ret.ToString();}/// <summary> /// 解密数据 /// </summary> /// <param name="content"></param> /// <param name="key"></param> /// <returns></returns> public static string DecryptByMD5(string content, string key = DefaultPassword){var des = System.Security.Cryptography.DES.Create();int len;len = content.Length / 2;byte[] inputByteArray = new byte[len];int x, i;for (x = 0; x < len; x++){i = System.Convert.ToInt32(content.Substring(x * 2, 2), 16);inputByteArray[x] = (byte)i;}System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(System.BitConverter.ToString(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(key + "md5"))).Replace("-", null).Substring(0, 8));des.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(System.BitConverter.ToString(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(key + "md5"))).Replace("-", null).Substring(0, 8));System.IO.MemoryStream ms = new System.IO.MemoryStream();System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(ms, des.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();return System.Text.Encoding.Default.GetString(ms.ToArray());}

3、AES加密

一度是目前实用最广泛的加密方式,虽然也被发现了破解方式,但安全性以及效率都还是比较高的加密方式,因此还在被广泛的使用中。

提供了几种方法:
1、字符串加密后返回字符串
2、字符串加密后返回字节数组
3、字节数组加密后返回字符串
4、字节数组加密后返回字节数组

   /// <summary>/// AES加密/// </summary>/// <param name="content"> 原文 </param>/// <param name="password"> 密钥 </param>/// <returns> 字节数组 </returns>public static byte[] EncryptToBytesByAes(string content, string key = DefaultPassword, string iv = DefaultPassword){var keyData = System.Text.Encoding.Default.GetBytes(key);var ivData = System.Text.Encoding.Default.GetBytes(iv);byte[] encrypted;// Create an Aes object// with the specified key and IV.using (System.Security.Cryptography.Aes aesAlg = System.Security.Cryptography.Aes.Create()){aesAlg.Key = keyData;aesAlg.IV = ivData;aesAlg.Mode = System.Security.Cryptography.CipherMode.CBC;aesAlg.Padding = System.Security.Cryptography.PaddingMode.ISO10126;// Create an encryptor to perform the stream transform.System.Security.Cryptography.ICryptoTransform encryptor = aesAlg.CreateEncryptor();// Create the streams used for encryption.using (System.IO.MemoryStream msEncrypt = new System.IO.MemoryStream()){using (System.Security.Cryptography.CryptoStream csEncrypt = new System.Security.Cryptography.CryptoStream(msEncrypt, encryptor, System.Security.Cryptography.CryptoStreamMode.Write)){using (System.IO.StreamWriter swEncrypt = new System.IO.StreamWriter(csEncrypt)){//Write all data to the stream.swEncrypt.Write(content);}encrypted = msEncrypt.ToArray();}}}// Return the encrypted bytes from the memory stream.return encrypted;}/// <summary>/// AES加密/// </summary>/// <param name="content"> 原文 </param>/// <param name="password"> 密钥 </param>/// <returns> 字节数组 </returns>public static byte[] EncryptToBytesByAes(byte[] content, string key = DefaultPassword, string iv = DefaultPassword){var keyData = System.Text.Encoding.Default.GetBytes(key);var ivData = System.Text.Encoding.Default.GetBytes(iv);byte[] encrypted;// Create an Aes object// with the specified key and IV.using (System.Security.Cryptography.Aes aesAlg = System.Security.Cryptography.Aes.Create()){aesAlg.Key = keyData;aesAlg.IV = ivData;aesAlg.Mode = System.Security.Cryptography.CipherMode.CBC;aesAlg.Padding = System.Security.Cryptography.PaddingMode.ISO10126;// Create an encryptor to perform the stream transform.System.Security.Cryptography.ICryptoTransform encryptor = aesAlg.CreateEncryptor();// Create the streams used for encryption.using (System.IO.MemoryStream msEncrypt = new System.IO.MemoryStream()){using (System.Security.Cryptography.CryptoStream csEncrypt = new System.Security.Cryptography.CryptoStream(msEncrypt, encryptor, System.Security.Cryptography.CryptoStreamMode.Write)){using (System.IO.StreamWriter swEncrypt = new System.IO.StreamWriter(csEncrypt)){//Write all data to the stream.swEncrypt.Write(content);}encrypted = msEncrypt.ToArray();}}}// Return the encrypted bytes from the memory stream.return encrypted;}/// <summary>/// AES加密/// </summary>/// <param name="content"> 原文 </param>/// <param name="password"> 密钥 </param>/// <returns> 字符串 </returns>public static string EncryptToStringByAes(string content, string key = DefaultPassword, string iv = DefaultPassword){var keyData = System.Text.Encoding.Default.GetBytes(key);var ivData = System.Text.Encoding.Default.GetBytes(iv);byte[] encrypted;// Create an Aes object// with the specified key and IV.using (System.Security.Cryptography.Aes aesAlg = System.Security.Cryptography.Aes.Create()){aesAlg.Key = keyData;aesAlg.IV = ivData;aesAlg.Mode = System.Security.Cryptography.CipherMode.CBC;aesAlg.Padding = System.Security.Cryptography.PaddingMode.ISO10126;// Create an encryptor to perform the stream transform.System.Security.Cryptography.ICryptoTransform encryptor = aesAlg.CreateEncryptor();// Create the streams used for encryption.using (System.IO.MemoryStream msEncrypt = new System.IO.MemoryStream()){using (System.Security.Cryptography.CryptoStream csEncrypt = new System.Security.Cryptography.CryptoStream(msEncrypt, encryptor, System.Security.Cryptography.CryptoStreamMode.Write)){using (System.IO.StreamWriter swEncrypt = new System.IO.StreamWriter(csEncrypt)){//Write all data to the stream.swEncrypt.Write(content);}encrypted = msEncrypt.ToArray();}}}// Return the encrypted bytes from the memory stream.return System.Text.Encoding.Default.GetString(encrypted);}/// <summary>/// AES加密/// </summary>/// <param name="content"> 原文 </param>/// <param name="password"> 密钥 </param>/// <returns> 字符串 </returns>public static string EncryptToStringByAes(byte[] content, string key = DefaultPassword, string iv = DefaultPassword){var keyData = System.Text.Encoding.Default.GetBytes(key);var ivData = System.Text.Encoding.Default.GetBytes(iv);byte[] encrypted;// Create an Aes object// with the specified key and IV.using (System.Security.Cryptography.Aes aesAlg = System.Security.Cryptography.Aes.Create()){aesAlg.Key = keyData;aesAlg.IV = ivData;aesAlg.Mode = System.Security.Cryptography.CipherMode.CBC;aesAlg.Padding = System.Security.Cryptography.PaddingMode.ISO10126;// Create an encryptor to perform the stream transform.System.Security.Cryptography.ICryptoTransform encryptor = aesAlg.CreateEncryptor();// Create the streams used for encryption.using (System.IO.MemoryStream msEncrypt = new System.IO.MemoryStream()){using (System.Security.Cryptography.CryptoStream csEncrypt = new System.Security.Cryptography.CryptoStream(msEncrypt, encryptor, System.Security.Cryptography.CryptoStreamMode.Write)){using (System.IO.StreamWriter swEncrypt = new System.IO.StreamWriter(csEncrypt)){//Write all data to the stream.swEncrypt.Write(content);}encrypted = msEncrypt.ToArray();}}}// Return the encrypted bytes from the memory stream.return System.Text.Encoding.Default.GetString(encrypted);}/// <summary>/// AES解密/// </summary>/// <param name="content"> 加密数据 </param>/// <param name="password"> 密钥 </param>/// <returns> 字节数组 </returns>public static byte[] DecryptToBytesByAes(byte[] data, string key = DefaultPassword, string iv = DefaultPassword){var keyData = System.Text.Encoding.Default.GetBytes(key);var ivData = System.Text.Encoding.Default.GetBytes(iv);// the decrypted text.byte[] content;// Create an Aes object// with the specified key and IV.using (System.Security.Cryptography.Aes aesAlg = System.Security.Cryptography.Aes.Create()){aesAlg.Key = keyData;aesAlg.IV = ivData;aesAlg.Mode = System.Security.Cryptography.CipherMode.CBC;aesAlg.Padding = System.Security.Cryptography.PaddingMode.ISO10126;// Create a decryptor to perform the stream transform.System.Security.Cryptography.ICryptoTransform decryptor = aesAlg.CreateDecryptor();// Create the streams used for decryption.using (System.IO.MemoryStream msDecrypt = new System.IO.MemoryStream(data)){using (System.Security.Cryptography.CryptoStream csDecrypt = new System.Security.Cryptography.CryptoStream(msDecrypt, decryptor, System.Security.Cryptography.CryptoStreamMode.Read)){using (System.IO.StreamReader srDecrypt = new System.IO.StreamReader(csDecrypt)){// Read the decrypted bytes from the decrypting stream// and place them in a string.var Text = srDecrypt.ReadToEnd();content = System.Text.Encoding.Default.GetBytes(Text);}}}}return content;}/// <summary>/// AES解密/// </summary>/// <param name="content"> 加密数据 </param>/// <param name="password"> 密钥 </param>/// <returns> 字节数组 </returns>public static byte[] DecryptToBytesByAes(string data, string key = DefaultPassword, string iv = DefaultPassword){var keyData = System.Text.Encoding.Default.GetBytes(key);var ivData = System.Text.Encoding.Default.GetBytes(iv);// the decrypted text.byte[] content;// Create an Aes object// with the specified key and IV.using (System.Security.Cryptography.Aes aesAlg = System.Security.Cryptography.Aes.Create()){aesAlg.Key = keyData;aesAlg.IV = ivData;aesAlg.Mode = System.Security.Cryptography.CipherMode.CBC;aesAlg.Padding = System.Security.Cryptography.PaddingMode.ISO10126;// Create a decryptor to perform the stream transform.System.Security.Cryptography.ICryptoTransform decryptor = aesAlg.CreateDecryptor();// Create the streams used for decryption.using (System.IO.MemoryStream msDecrypt = new System.IO.MemoryStream(System.Text.Encoding.Default.GetBytes(data))){using (System.Security.Cryptography.CryptoStream csDecrypt = new System.Security.Cryptography.CryptoStream(msDecrypt, decryptor, System.Security.Cryptography.CryptoStreamMode.Read)){using (System.IO.StreamReader srDecrypt = new System.IO.StreamReader(csDecrypt)){// Read the decrypted bytes from the decrypting stream// and place them in a string.var Text = srDecrypt.ReadToEnd();content = System.Text.Encoding.Default.GetBytes(Text);}}}}return content;}/// <summary>/// AES解密/// </summary>/// <param name="content"> 加密数据 </param>/// <param name="password"> 密钥 </param>/// <returns> 字符串 </returns>public static string DecryptToStringByAes(byte[] data, string key = DefaultPassword, string iv = DefaultPassword){var keyData = System.Text.Encoding.Default.GetBytes(key);var ivData = System.Text.Encoding.Default.GetBytes(iv);// the decrypted text.string content = string.Empty;// Create an Aes object// with the specified key and IV.using (System.Security.Cryptography.Aes aesAlg = System.Security.Cryptography.Aes.Create()){aesAlg.Key = keyData;aesAlg.IV = ivData;aesAlg.Mode = System.Security.Cryptography.CipherMode.CBC;aesAlg.Padding = System.Security.Cryptography.PaddingMode.ISO10126;// Create a decryptor to perform the stream transform.System.Security.Cryptography.ICryptoTransform decryptor = aesAlg.CreateDecryptor();// Create the streams used for decryption.using (System.IO.MemoryStream msDecrypt = new System.IO.MemoryStream(data)){using (System.Security.Cryptography.CryptoStream csDecrypt = new System.Security.Cryptography.CryptoStream(msDecrypt, decryptor, System.Security.Cryptography.CryptoStreamMode.Read)){using (System.IO.StreamReader srDecrypt = new System.IO.StreamReader(csDecrypt)){// Read the decrypted bytes from the decrypting stream// and place them in a string.content = srDecrypt.ReadToEnd();}}}}return content;}/// <summary>/// AES解密/// </summary>/// <param name="content"> 加密数据 </param>/// <param name="password"> 密钥 </param>/// <returns> 字节数组 </returns>public static string DecryptToStringByAes(string data, string key = DefaultPassword, string iv = DefaultPassword){var keyData = System.Text.Encoding.Default.GetBytes(key);var ivData = System.Text.Encoding.Default.GetBytes(iv);// the decrypted text.string content = string.Empty;// Create an Aes object// with the specified key and IV.using (System.Security.Cryptography.Aes aesAlg = System.Security.Cryptography.Aes.Create()){aesAlg.Key = keyData;aesAlg.IV = ivData;aesAlg.Mode = System.Security.Cryptography.CipherMode.CBC;aesAlg.Padding = System.Security.Cryptography.PaddingMode.ISO10126;// Create a decryptor to perform the stream transform.System.Security.Cryptography.ICryptoTransform decryptor = aesAlg.CreateDecryptor();// Create the streams used for decryption.using (System.IO.MemoryStream msDecrypt = new System.IO.MemoryStream(System.Text.Encoding.Default.GetBytes(data))){using (System.Security.Cryptography.CryptoStream csDecrypt = new System.Security.Cryptography.CryptoStream(msDecrypt, decryptor, System.Security.Cryptography.CryptoStreamMode.Read)){using (System.IO.StreamReader srDecrypt = new System.IO.StreamReader(csDecrypt)){// Read the decrypted bytes from the decrypting stream// and place them in a string.content = srDecrypt.ReadToEnd();}}}}return content;}

目前整理的就这几种,之后如果有更新,再更新添加过来。

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

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

相关文章

部署本地deepseek并在调用的详细步骤以及解决一些可能出现的问题(Windows,Linux, WSL)

打开Ollama官网&#xff1a;https://ollama.com/ 直接下载Ollama并且安装好Ollama、这时候就能看到app里多了个ollama&#xff0c;但是我们不用打开它 打开Windows Powershell&#xff1a; ollama run deepseek-r1:1.5b 7b 8b 14b 32b 70b 根据自己的电脑配置和需求更换不同的…

【KWDB 创作者计划】_嵌入式硬件篇---寄存器与存储器截断与溢出

文章目录 前言一、寄存器与存储器1. 定义与基本概念寄存器(Register)位置功能特点存储器(Memory)位置功能特点2. 关键区别3. 层级关系与协作存储层次结构协作示例4. 为什么需要寄存器性能优化指令支持减少总线竞争5. 其他寄存器类型专用寄存器程序计数器(PC)栈指针(SP)…

小白自学python第二天

学习python的第二天 一、判断语句 1、布尔类型和比较运算符 1、布尔类型 表示现实生活中的逻辑&#xff0c;真&#xff08;True&#xff0c;用数字1表示&#xff09;和假&#xff08;False&#xff0c;用数字0表示&#xff09; 2、布尔类型变量的定义 变量的名称 布尔类…

linux基础操作1------(文件命令)

一.前言 我们本章开始讲解linux&#xff0c;我们对于linux得有重要的认识&#xff0c;比如项目部署等等&#xff0c;都会用到linux&#xff0c;今天我们就开始linux的学习&#xff0c;我们需要准备的工具有vmware和xshell&#xff0c;而这里我就不教大家虚拟机的安装以及xshel…

编码问题整合

一、windows系统编码 查看编码命令&#xff1a;chcp - 936 GBK - 65001 UTF-8 - 437 英文修改系统编码 1、控制面板修改 需管理员权限-Windows 10/11进入 控制面板 > 区域 > 管理 > 更改系统区域设置勾选 Beta版: 使用Unicode UTF-8提供全球语言支持 → 重启生效修…

如何配置Spark

1.上传spark安装包到某一台机器&#xff08;自己在finaShell上的机器&#xff09;。 2.解压。 把第一步上传的安装包解压到/opt/module下&#xff08;也可以自己决定解压到哪里&#xff09;。对应的命令是&#xff1a;tar -zxvf 安装包 -C /opt/module 3.重命名。进入/opt/mo…

Redis 完整配置模板

一、基础连接配置&#xff08;单机模式&#xff09; 基础参数&#xff08;适用Spring Boot&#xff09; spring:redis:host: 127.0.0.1port: 6379password: your_passworddatabase: 0 # 默认DB索引timeout: 2000ms # 全局操作超时时间二、连接池参数&#xff08;通用核心配…

边界凸台建模与实例

文章目录 边界凸台特征耳机案例瓶子 边界凸台特征 两侧对称拉伸最上面的圆柱 同过两点一基准面画草图&#xff0c;在基准面上画椭圆 隐藏无关的实体和草图&#xff0c;以便椭圆的端点能与线给穿透约束&#xff0c;下面的点与下面的线也给穿透&#xff0c;短轴长给35&#xff08…

河北省大数据应用创新大赛样题

** 河北省大数据应用创新大赛样题 ** 1. 在Linux下安装Java并搭建完全分布式Hadoop集群。在Linux终端执行命令“initnetwork”&#xff0c;或双击桌面上名称为“初始化网络”的图标&#xff0c;初始化实训平台网络。 【数据获取】 使用wget命令获取JDK安装包&#xff1a; “w…

【数据可视化-21】水质安全数据可视化:探索化学物质与水质安全的关联

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

DC-2寻找Flag1、2、3、4、5,wpscan爆破、git提权

一、信息收集 1、主机探测 arp-scan -l 探测同网段2、端口扫描 nmap -sS -sV 192.168.66.136 80/tcp open http Apache httpd 2.4.10 ((Debian)) 7744/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u7 (protocol 2.0)这里是扫描出来两个端口&#xff0c;80和ssh&…

SQLMesh 表格对比指南:深入理解 table_diff 工具的实际应用

在数据集成和转换过程中&#xff0c;确保数据模型的一致性和准确性至关重要。SQLMesh 提供了一个强大的 table_diff 工具&#xff0c;可以帮助用户比较 SQLMesh 模型或数据库表/视图的架构和数据。本文将通过具体示例详细说明如何使用 table_diff 工具进行跨环境比较和直接比较…

重构智能场景:艾博连携手智谱,共拓智能座舱AI应用新范式

2025年4月24日&#xff0c;智能座舱领域创新企业艾博连科技与国产大模型独角兽智谱&#xff0c;在上海国际车展艾博连会客厅签署合作协议。双方宣布将深度整合智谱在AI大模型领域的技术积淀与艾博连在汽车智能座舱场景的落地经验&#xff0c;共同推进下一代"有温度、懂需求…

vscode flutter 插件, vscode运行安卓项目,.gradle 路径配置

Flutter Flutter Widget Snippets Awesome Flutter Snippets i dart-import Dart Data Class Generator Json to Dart Model Dart Getters And Setter GetX Snippets GetX Generator GetX Generator for Flutter flutter-img-syncvscode运行安卓项目&#xff0c;.gradle 路径配…

Parasoft C++Test软件单元测试_对函数打桩的详细介绍

系列文章目录 Parasoft C++Test软件静态分析:操作指南(编码规范、质量度量)、常见问题及处理 Parasoft C++Test软件单元测试:操作指南、实例讲解、常见问题及处理 Parasoft C++Test软件集成测试:操作指南、实例讲解、常见问题及处理 进阶扩展:自动生成静态分析文档、自动…

c# TI BQFS文件格式详解及C#转换

FlashStream文件格式详解及C#转换 一、FlashStream文件格式详细解读 文件概述 FlashStream文件是TI用于配置电池电量计的文本文件格式,主要特点: • 纯文本格式,使用ASCII字符• 每行一条指令 • 分号(;)开头的行为注释 • 主要包含三种指令类型:写命令、比较命令和延时…

k8s中pod报错 FailedCreatePodSandBox

问题现象&#xff1a; 创建容器时出现一下情况 而且删掉控制器的时候pod还会卡住 解决&#xff1a; 将calico的pod重新删掉。其中有1个控制器pod以及3个node pod 删掉后&#xff0c;大概10来秒就重新创建完成了。 然后现在在使用kubectl apply -f 文件.yaml 就可以正常创…

分布式事务 两阶段提交协议(2PC的原理、挑战)

引言&#xff1a;分布式事务的挑战 在分布式系统中&#xff0c;数据和服务往往分布在多个节点上。例如&#xff0c;一个电商下单操作可能涉及订单服务、库存服务和支付服务&#xff0c;这三个服务需要协同完成一个事务&#xff1a;要么全部成功&#xff0c;要么全部失败。这种…

Jenkins Pipeline 构建 CI/CD 流程

文章目录 jenkins 安装jenkins 配置jenkins 快速上手在 jenkins 中创建一个新的 Pipeline 作业配置Pipeline运行 Pipeline 作业 Pipeline概述Declarative PipelineScripted Pipeline jenkins 安装 安装环境&#xff1a; Linux CentOS 10&#xff1a;Linux CentOS9安装配置Jav…

【CF】Day43——Codeforces Round 906 (Div. 2) E1

E1. Doremys Drying Plan (Easy Version) 题目&#xff1a; 思路&#xff1a; very好题&#xff0c;加深对扫描线的应用&#xff0c;值得深思 由于k 2&#xff0c;那我们就可以使用简单一点的方法来写 题目可以转化为&#xff1a;给定n个线段&#xff0c;现在让你删去2条线段…