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

密码学笔记

密码学


一、密码学基础概念

1. CIA三要素

  • 机密性 (Confidentiality):信息不被未授权者访问。
    • 例子:用钥匙锁住日记本,只有你有钥匙。
  • 完整性 (Integrity):信息在传输/存储中不被篡改。
    • 例子:快递包裹封条,若破损则可能被篡改。
  • 可用性 (Availability):授权用户能随时访问资源。
    • 例子:银行系统需保证7×24小时服务。

2. 密码学与隐写的区别

  • 密码学:隐藏信息内容(如加密后的乱码)。
  • 隐写:隐藏信息存在性(如图片藏文字)。

二、古典密码

1. 凯撒密码

  • 原理:字母表固定偏移(如偏移3)。
    • 加密公式:密文字母 = (明文字母 + 3) mod 26
    • 例子:A → DHELLO → KHOOR

Python代码示例

def caesar_encrypt(text, shift):  result = ""  for char in text:  if char.isalpha():  base = ord('A') if char.isupper() else ord('a')  result += chr((ord(char) - base + shift) % 26 + base)  else:  result += char  return result  print(caesar_encrypt("HELLO", 3))  # 输出:KHOOR  

代码解释

  • 遍历每个字符,计算偏移后的ASCII值。
  • mod 26确保字母循环(如Z + 3 → C)。

2. 栅栏密码

  • 原理:将明文按行分组后按列读取。
    • 例子:明文THEQUICKBROWNFOX,分2栏:
      T E Q I C B O O X  
      H U K R W N F X  
      
      密文:TEQICBOOXHUKRWNX

Python代码示例

def rail_fence_encrypt(text, rails):  fence = [[] for _ in range(rails)]  rail = 0  for char in text:  fence[rail].append(char)  rail = (rail + 1) % rails  return ''.join([''.join(row) for row in fence])  print(rail_fence_encrypt("HELLOWORLD", 2))  # 输出:HLOOL ELWRD  

代码解释

  • 创建rails个空列表模拟栅栏。
  • 按顺序循环填入字符,最后按行拼接。

3. 摩斯密码

  • 原理:用点(·)和划(−)表示字母。
    • 例子:SOS → ··· −−− ···

Python代码示例

morse_code = {'A':'.-', 'B':'-...', 'S':'...', 'O':'---'}  
def to_morse(text):  return ' '.join([morse_code[c.upper()] for c in text if c.upper() in morse_code])  print(to_morse("SOS"))  # 输出:... --- ...  

代码解释

  • 查表替换每个字符为对应的摩斯码。

三、数学基础

1. 模运算

  • 定义:对整数取余数的运算,符号为 mod
    • 例子:17 mod 5 = 2(因为 17 ÷ 5 余 2)。
  • 同余关系:若 a mod n = b mod n,则称 a ≡ b (mod n)
    • 例子:23 ≡ 65 (mod 7),因为两者余数均为 2。

应用场景:钟表时间(12小时制)、密码学中的循环计算。


2. 欧拉定理

  • 核心公式:若 an 互质,则 a^φ(n) ≡ 1 (mod n)
    • φ(n)(欧拉函数):小于 n 且与 n 互质的正整数的个数。
    • 例子:若 n = 7(质数),则 φ(7) = 6

计算 φ(n)

  • n = p×q(p、q为不同质数),则 φ(n) = (p-1)(q-1)
  • 例子:n = 15 = 3×5,则 φ(15) = 2×4 = 8

3. 费马小定理

  • 特例:若 p 是质数且 ap 互质,则 a^(p-1) ≡ 1 (mod p)
    • 例子:3^6 mod 7 = 729 mod 7 = 1

4. 扩展欧几里得算法(求逆元)

  • 目标:找到整数 x, y 使得 ax + by = gcd(a, b)
  • 逆元:若 am 互质,则存在 b 使得 a×b ≡ 1 (mod m),称 ba 的模 m 逆元。

Python代码示例

def extended_gcd(a, b):  if b == 0:  return a, 1, 0  else:  g, x, y = extended_gcd(b, a % b)  return g, y, x - (a // b) * y  a, m = 3, 11  
g, x, y = extended_gcd(a, m)  
if g == 1:  inverse = x % m  print(f"3的模11逆元是 {inverse}")  # 输出:4(因为 3×4=12 ≡1 mod11)  

代码解释

  • 递归计算最大公约数 g 和系数 x, y
  • g=1,则 x % m 即为 a 的逆元。

四、RSA算法

1. 密钥生成步骤

  1. 选两个大质数 pq(如 512位)。
  2. 计算模数 n = p×q
  3. 计算欧拉函数 φ(n) = (p-1)(q-1)
  4. 选公钥 e,满足 1 < e < φ(n)eφ(n) 互质。
  5. 计算私钥 d,即 d ≡ e⁻¹ (mod φ(n))
  6. 公钥为 (n, e),私钥为 (n, d)

示例

  • p=3, q=11n=33, φ(n)=20
  • e=3(与20互质)。
  • 计算 d=7(因为 3×7=21 ≡1 mod20)。

2. 加密与解密

  • 加密公式密文 c = m^e mod nm 是明文)。
  • 解密公式明文 m = c^d mod n

Python代码示例

from Crypto.Util.number import getPrime, inverse  # 密钥生成  
p = getPrime(10)  # 生成10位质数  
q = getPrime(10)  
n = p * q  
phi = (p-1) * (q-1)  
e = 65537  # 常用公钥  
d = inverse(e, phi)  # 加密  
m = 42  
c = pow(m, e, n)  # 解密  
m_decrypted = pow(c, d, n)  
print(f"明文: {m}, 解密结果: {m_decrypted}")  # 输出:42  

代码解释

  • getPrime 生成质数,inverse 计算逆元。
  • pow(c, d, n) 高效计算大数幂取模。

3. 安全性原理

  • 核心难点:大整数分解问题(已知 n 难以分解出 pq)。
  • 攻击方式
    • 暴力分解(对小 n 有效)。
    • 量子计算的Shor算法(威胁大数分解)。

五、RSA常见攻击场景

1. 模数分解攻击

  • 原理:若模数 n 过小或存在特殊结构(如 pq 接近),可通过分解 n 恢复私钥。
  • 工具yafufactordbsagemath
  • 示例(费马分解):
    • n = p×q,且 pq 接近,则 p ≈ √n
    • √n 开始搜索相邻素数,找到 pq

Python代码示例

import gmpy2  def fermat_factorization(n):  a = gmpy2.isqrt(n) + 1  b2 = a*a - n  while not gmpy2.is_square(b2):  a += 1  b2 = a*a - n  b = gmpy2.isqrt(b2)  return (a + b, a - b)  n = 1234567891011121314151617181921  
p, q = fermat_factorization(n)  
print(f"p = {p}, q = {q}")  

代码解释

  • √n 开始逐步增加 a,计算 b² = a² - n,直到 b 为整数。

2. 共模攻击

  • 原理:若同一明文用两个不同的公钥 (n, e1)(n, e2) 加密,且 e1e2 互质,可通过扩展欧几里得算法恢复明文。
  • 公式:找到 ab 使得 a*e1 + b*e2 = 1,则 m = (c1^a * c2^b) mod n

Python代码示例

from Crypto.Util.number import inverse  n = 123456789  
e1, e2 = 3, 65537  
c1 = pow(m, e1, n)  
c2 = pow(m, e2, n)  # 扩展欧几里得求a和b  
g, a, b = extended_gcd(e1, e2)  
m = (pow(c1, a, n) * pow(c2, b, n)) % n  
print(f"明文: {m}")  

代码解释

  • extended_gcd 函数返回 ab,使得 a*e1 + b*e2 = 1

3. 低加密指数攻击

  • 场景:若公钥 e 极小(如 e=3),且明文 m 较小,则 m^e < n,可直接开方恢复明文。
  • 示例
    e = 3  
    c = m**e  # 假设n > m^e  
    m_decrypted = gmpy2.iroot(c, e)[0]  
    

六、对称密码(AES)

1. AES加密流程

  • 分组长度:128位(16字节)。
  • 核心步骤
    1. 轮密钥加(AddRoundKey):将密钥与数据异或。
    2. 字节替换(SubBytes):通过S盒替换每个字节。
    3. 行移位(ShiftRows):循环左移每一行。
    4. 列混淆(MixColumns):矩阵乘法混淆列数据。

Python代码示例(简化版)

from Crypto.Cipher import AES  key = b'0123456789abcdef'  
data = b'ThisIsASecretMsg'  # 加密  
cipher = AES.new(key, AES.MODE_ECB)  
ciphertext = cipher.encrypt(data)  # 解密  
plaintext = cipher.decrypt(ciphertext)  
print(f"解密结果: {plaintext}")  

代码解释

  • AES.MODE_ECB 表示电子密码本模式(无填充)。

2. AES的S盒与逆S盒

  • S盒:非线性替换表,将每个字节映射为另一个字节。
  • 逆S盒:解密时反向替换。
  • 生成规则:基于有限域乘法逆元和仿射变换。

七、流密码(RC4)

1. RC4算法流程

  1. 初始化S盒:填充0-255,并用密钥打乱顺序。
  2. 生成密钥流:通过交换S盒元素生成伪随机序列。

Python代码示例

def rc4(key):  S = list(range(256))  j = 0  # 初始化S盒  for i in range(256):  j = (j + S[i] + key[i % len(key)]) % 256  S[i], S[j] = S[j], S[i]  # 生成密钥流  i = j = 0  while True:  i = (i + 1) % 256  j = (j + S[i]) % 256  S[i], S[j] = S[j], S[i]  K = S[(S[i] + S[j]) % 256]  yield K  key = b'SecretKey'  
plaintext = b'HelloWorld'  
keystream = rc4(key)  
ciphertext = bytes([p ^ next(keystream) for p in plaintext])  
print(f"密文: {ciphertext}")  

代码解释

  • 初始化阶段通过密钥打乱S盒,生成阶段动态交换元素并输出密钥流。

八、证书格式解析

1. PEM与DER格式

  • PEM:以 -----BEGIN/END 包裹的Base64编码文本,常用于存储公钥/私钥。
    -----BEGIN PUBLIC KEY-----  
    MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQ...  
    -----END PUBLIC KEY-----  
    
  • DER:二进制格式,适用于程序直接解析。

2. 格式转换(OpenSSL)

  • PEM转DER
    openssl rsa -in public.pem -inform PEM -outform DER -out public.der  
    
  • DER转PEM
    openssl rsa -in public.der -inform DER -outform PEM -out public.pem  
    

3. Python解析证书

from Crypto.PublicKey import RSA  # 读取PEM证书  
with open("public.pem", "r") as f:  pem_data = f.read()  
key = RSA.import_key(pem_data)  
print(f"模数n={key.n}, 公钥e={key.e}")  

代码解释

  • RSA.import_key 可直接解析PEM格式的公钥/私钥。

九、编码方式

1. Base64编码

  • 原理:将二进制数据按6位分组,映射到64个可打印字符(A-Z, a-z, 0-9, +/)。
  • 示例
    import base64  
    data = b"Hello, Crypto!"  
    encoded = base64.b64encode(data).decode()  # SGVsbG8sIENyeXB0byE=  
    decoded = base64.b64decode(encoded)       # b'Hello, Crypto!'  
    

2. URL编码

  • 原理:将特殊字符替换为 % 后跟十六进制值(如空格→%20)。
  • 示例
    from urllib.parse import quote, unquote  
    url = "flag{hello world}"  
    encoded = quote(url)        # flag%7Bhello%20world%7D  
    decoded = unquote(encoded)  # flag{hello world}  
    

3. Quoted-printable编码

  • 原理:非ASCII字符用 =XX 表示(如 =E4=B8=AD)。
  • 示例
    import quopri  
    text = "flag{中文}"  
    encoded = quopri.encodestring(text.encode()).decode()  # flag=E4=B8=AD=E6=96=87  
    decoded = quopri.decodestring(encoded)                 # b'flag{中文}'  
    

十、现代密码学工具总结

1. 常用工具

  • OpenSSL:命令行工具,支持证书生成、格式转换、加解密。
    # 生成RSA私钥  
    openssl genpkey -algorithm RSA -out private.pem  
    # 提取公钥  
    openssl rsa -pubout -in private.pem -out public.pem  
    
  • PyCryptodome:Python密码学库,支持AES、RSA、哈希等。
    from Crypto.Cipher import AES  
    cipher = AES.new(key, AES.MODE_GCM)  # AES-GCM模式加密  
    
  • hashlib:Python标准库,支持SHA256、MD5等哈希算法。
    import hashlib  
    hash_obj = hashlib.sha256(b"data").hexdigest()  
    

2. 在线工具

  • Factordb:大整数分解(factordb.com)。
  • CyberChef:多功能编解码工具(gchq.github.io/CyberChef)。

十一、补充知识点

1. 哈希函数

  • 特性:单向性、抗碰撞性。
  • 应用场景:文件完整性校验、密码存储。
    import hashlib  
    password = "123456".encode()  
    salt = os.urandom(16)  
    hashed = hashlib.pbkdf2_hmac("sha256", password, salt, 100000)  
    

2. 数字签名

  • 流程
    1. 发送方用私钥签名数据。
    2. 接收方用公钥验证签名。
  • 示例(RSA签名)
    from Crypto.Signature import pkcs1_15  
    from Crypto.Hash import SHA256  # 签名  
    hash_obj = SHA256.new(data)  
    signature = pkcs1_15.new(private_key).sign(hash_obj)  # 验签  
    try:  pkcs1_15.new(public_key).verify(hash_obj, signature)  print("验签成功")  
    except (ValueError, TypeError):  print("验签失败")  
    

  • 流程
    1. 发送方用私钥签名数据。
    2. 接收方用公钥验证签名。
  • 示例(RSA签名)
    from Crypto.Signature import pkcs1_15  
    from Crypto.Hash import SHA256  # 签名  
    hash_obj = SHA256.new(data)  
    signature = pkcs1_15.new(private_key).sign(hash_obj)  # 验签  
    try:  pkcs1_15.new(public_key).verify(hash_obj, signature)  print("验签成功")  
    except (ValueError, TypeError):  print("验签失败")  
    

相关文章:

密码学笔记

密码学 一、密码学基础概念 1. CIA三要素 机密性 (Confidentiality)&#xff1a;信息不被未授权者访问。 例子&#xff1a;用钥匙锁住日记本&#xff0c;只有你有钥匙。 完整性 (Integrity)&#xff1a;信息在传输/存储中不被篡改。 例子&#xff1a;快递包裹封条&#xff0c…...

C#结构体(Struct)详解

在 C# 中&#xff0c;‌结构体&#xff08;struct&#xff09;‌ 是一种值类型数据类型&#xff0c;适用于封装小型数据组。与类&#xff08;class&#xff09;不同&#xff0c;结构体在栈&#xff08;Stack&#xff09;上分配内存&#xff0c;且赋值时会发生值复制。以下是结构…...

Tomato靶机通关攻略

1.安装并开启靶机 2.用Kali查询靶机IP Kali 的IP 靶机的IP 3.访问靶机 4.用御剑扫描端口 5.获取敏感目录 分别访问三个目录 6.查看目录 发现info.php并进入 查看源码&#xff0c;发现文件包含漏洞 利用漏洞查看日志文件 http://192.168.40.139/antibot_image/antibots/info…...

Go Ebiten小游戏开发:俄罗斯方块

在这篇文章中&#xff0c;我们将一起开发一个简单的俄罗斯方块游戏&#xff0c;使用Go语言和Ebiten游戏库。Ebiten是一个轻量级的游戏库&#xff0c;适合快速开发2D游戏。我们将逐步构建游戏的基本功能&#xff0c;包括游戏逻辑、图形绘制和用户输入处理。 项目结构 我们的项…...

Github 2025-03-12 C开源项目日报Top5

根据Github Trendings的统计,今日(2025-03-12统计)共有5个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目5C++项目1Lean的LEDE源码:为国产龙芯LOONGSON SoC loongarch64/飞腾Phytium腾锐2000系列架构添加支持 创建周期:2338 天开发语言:C协议类…...

【机器学习-基础知识】统计和贝叶斯推断

1. 概率论基本概念回顾 1. 概率分布 定义: 概率分布(Probability Distribution)指的是随机变量所有可能取值及其对应概率的集合。它描述了一个随机变量可能取的所有值以及每个值被取到的概率。 对于离散型随机变量,使用概率质量函数来描述。对于连续型随机变量,使用概率…...

Unity3D 着色器优化(Shader Optimization)

前言 Unity3D 着色器&#xff08;Shader&#xff09;优化是提升渲染性能的关键环节&#xff0c;尤其是在移动设备或复杂场景中。以下是系统的优化策略和实践建议&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经…...

基于SpringBoot的“体育购物商城”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“体育购物商城”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体模块设计 前台用户登录界面 系统首页界面…...

数据库约束

数据库约束 1. NULL约束2. UNIQUE&#xff1a;唯一约束3. DEFAULT&#xff1a;默认值约束4. PRIMARY KEY&#xff1a;主键约束5. FOREIGN KEY&#xff1a;外键约束6. CHECK约束 数据库约束是关系型数据库的一个重要功能&#xff0c;主要作用是保证数据的正确性&#xff0c;也就…...

【经典算法】Leetcode-零钱兑换问题

一、题目 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。你可以认为每种硬币的数量是无限的…...

Go 语言使用Protobuf 进行序列化详解

文章目录 Go 语言使用Protobuf 进行序列化详解1. Protobuf是什么?2. 安装Protobuf 及 Go 依赖3. 编写.proto 文件4. 实现序列化和反序列化 Go 语言使用Protobuf 进行序列化详解 1. Protobuf是什么? 以下是 Protobuf 官方中文文档的概述: Protobuf(Protocol Buffers) 是一种…...

Windows控制台函数:标准输入输出流交互函数GetStdHandle()

目录 什么是 GetStdHandle&#xff1f; 它长什么样&#xff1f; 怎么用它&#xff1f; 它跟 std::cout 有什么不一样&#xff1f; GetStdHandle 是一个 Windows API 函数&#xff0c;用于获取标准输入、标准输出或标准错误设备的句柄。它定义在 Windows 的核心头文件 <…...

自然语言处理初学者指南

文章目录 一、说明二、自然语言处理发展史2.1 最早的自然语言处理简介2.2 历史2.3 NLP 的早期工作 三、NLP的现代方法3.1 单词编码3.2 循环神经网络3.3 强化学习3.4 深度学习 四、更进一步的方法 一、说明 对于初学者来说&#xff0c;自然语言处理的发展历史非常有必要了解&am…...

Kubernetes教程(七)了解集群、标签、Pod和Deployment

了解集群、标签、Pod和Deployment 一、K8s资源对象二、K8s集群1. Master2. Node 三、Namespace&#xff08;命名空间&#xff09;四、Label&#xff08;标签&#xff09;五、Pod1. 共享网络命名空间2. 共享数据 六、工作负载1. 设置副本数2. 应用升级 结语 Kubernetes的知识真的…...

【BUG分析】微服务无法读取Nacos中的共享配置

项目场景 基于Spring Cloud微服务的商城系统。 使用Nacos进行统一配置管理&#xff0c;在bootstrap.xml中读取配置参数。 问题描述 购物车微服务可以读取Nacos中的共享mybatis配置&#xff0c;商品管理微服务却读不到&#xff0c;启动报错提示无法配置数据库源&#xff1a; …...

SpringMVC (一)基础

目录 SpringMVC 一 简单使用 1 新建模块选择指定参数 2 创建实现类 3 将项目启动 4 运行结果&#xff1a;在浏览器当中响应执行 二 RequestMapping 三 请求限定 SpringMVC SpringMVC是Spring的web模块&#xff0c;用来开发Web应用&#xff0c;SpringMVC应用最终作为B/…...

【ES6】ES6中的类

基础定义和使用 class Animal {constructor(name, species, age) {this.name namethis.species speciesthis.age age} }let dog new Animal("Spot", "Dog", 4)私有变量 变量名前带#即可。 Getter 和Setter方法 继承 // 父类 class Point{construc…...

兴达易控Profinet 转 ModbusTCP跨网段通信模块

Profinet 转 ModbusTCP/跨网段通信模块 Profinet转ModbusTCP/跨网段通信模块&#xff0c;作为现代工业自动化系统中不可或缺的重要组件&#xff0c;正日益受到广泛关注和应用。 这种模块的核心功能是将Profinet网络协议转换为Modbus TCP协议&#xff0c;实现不同网络之间的无缝…...

linux 的免密切换用户PAM配置

/etc/pam.d/su是Linux系统中与用户切换&#xff08;su命令&#xff09;相关的PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插拔认证模块&#xff09;配置文件。以下是对它的详细介绍&#xff1a; 简介 作用 PAM是一种用于管理系统认证的机制&#xff0c;…...

使用 Python pandas操作 Excel 文件

使用 Python pandas 操作 Excel 文件 flyfish pandas 是 Python 中一个强大的数据处理和分析库&#xff0c;它提供了丰富的数据结构&#xff08;如 Series 和 DataFrame&#xff09;和数据操作方法&#xff0c;能够方便地处理各种数据格式&#xff0c;包括 Excel 文件。 安装…...

UE5.5 Niagara 发射器粒子更新模块

Particle State &#xff08;粒子状态&#xff09;模块 Particle State 主要用于控制粒子的生存状态&#xff0c;包括死亡、消失、响应事件等。 Particle State Kill Particles When Lifetime Has Elapsed 当粒子的生命周期结束时&#xff0c;销毁这些粒子。 Lifetime &…...

状态模式的C++实现示例

核心思想 状态模式&#xff08;State Pattern&#xff09; 是一种行为设计模式&#xff0c;允许对象在其内部状态改变时改变其行为。它将状态相关的逻辑分散到不同的状态类中&#xff0c;避免了使用大量的条件语句来处理不同状态下的行为。 状态抽象化&#xff1a;将对象的状…...

ThinkPHP8.0+MySQL8.0搭建简单实用电子证书查询系统

客户花了100元买了一个系统&#xff0c;开始不能导入&#xff0c;到处找人帮忙解决。给解决能导入了&#xff0c;不能修改&#xff0c;满足不了用户的需求。用户一狠心&#xff0c;花200块钱&#xff0c;叫我给他定制了一个电子证书查询系统。还免费给部署到服务器。惭愧惭愧……...

STM32全系大阅兵(2)

接前一篇文章:STM32全系大阅兵(1) 本文内容参考: STM32家族系列的区别_stm32各个系列区别-CSDN博客 STM32--STM32 微控制器详解-CSDN博客...

upload-labs通关攻略 【Pass-01~Pass-19】

注意&#xff1a;GitHub中upload-labs有多个版本:19关、21关、23关。版本不同&#xff0c;关卡的顺序也很可能不同。此次例子是21关。 项目地址&#xff1a;https://github.com/c0ny1/upload-labs 一、Pass-01 【js前端检测的绕过】 1. 打开Pass-01 访问&#xff1a;ip/uploa…...

HCIP复习拓扑练习(修改版)

拓扑&#xff1a; 实际&#xff1a; 需求&#xff1a; 需求分析 1.这意味着学校内部网络能够正常解析域名并进行互联网访问。 2. PC1和PC2处于同一个内网192.168.1.0/24&#xff0c;其中PC1有权限访问外部网段3.3.3.0/24&#xff0c;而PC2没有。这涉及ACL&#xff08;访问控制…...

Zabbix 7.2 + Grafana 中文全自动安装ISO镜像

简介 ​ 基于Zabbix 官方的Alma Linux 8 作为基础镜像。 镜像源都改为国内大学镜像站&#xff0c;自动联网安装ZabbixGrafana。 安装中文字体、Zabbix和Grafana也配置默认中文。 Zabbix 也指定中文字体&#xff0c;绘图无乱码。 配置时区为东八区&#xff0c;Zabbix配置We…...

使用 Python 将 PDF 转换为文本:打造一个简单高效的提取工具

在数字化时代&#xff0c;PDF 文件是我们日常生活中常见的文档格式。无论是学术论文、工作报告还是电子书&#xff0c;PDF 的广泛使用让提取其中文字内容成为一个常见需求。手动复制粘贴显然效率低下&#xff0c;而借助 Python&#xff0c;我们可以轻松实现自动化提取。本文将介…...

scoop退回软件版本的方法

title: scoop退回软件版本的方法 date: 2025-3-11 23:53:00 tags: 其他 前言 在软件更新后&#xff0c;如果出现了很影响使用体验的问题&#xff0c;那么可以把软件先退回以前的版本进行使用&#xff0c; 但是scoop本身并没有提供直接让软件回退版本的功能&#xff0c;因此…...

网络爬虫-2:正则化

1.正则化 一.正则化 1.转义字符 转义字符含义\s空白字符&#xff08;空格、制表符等&#xff09;\d数字字符&#xff08;0-9&#xff09;\w字母、数字或下划线.除换行符外的任意字符\n换行符\t制表符 import re result re.findall(r\s, Hello World\nPython) print(result)…...

emacs使用mongosh的方便工具发布

github项目地址: GitHub - csfreebird/emacs_mongosh: 在emacs中使用mongosh快速登录mongodb数据库 * 用途 在emacs中使用mongosh快速登录mongodb数据库&#xff0c; 操作方法: M-x mongosh, 输入数据库名称&#xff0c;然后就可以自动登录&#xff0c;前提是你已经配置好了…...

【Spring】详细剖析Spring程序

文章目录 一、Spring概述1. Spring简介1.1 OCP开闭原则1.2 依赖倒置原则DIP1.3 控制反转IoC 2. Spring8大模块 二、Spring的入门程序1. Spring官网2. 第一个Spring程序2.1 创建工程2.2 配置 pom.xml&#xff1a;2.3 定义bean&#xff1a;User . java2.4 配置文件 spring.xml2.5…...

《MySQL数据库从零搭建到高效管理|库的基本操作》

目录 一、数据库的操作 1.1 展示数据库 1.2 创建数据库 1.3 使用数据库 1.4 查看当前数据库 1.5 删除数据库 1.6 小结 二、常用数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 一、数据库的操作 打开MySQL命令行客户端&#xff0c;安装完MySQL后会有两个客户端…...

docker部署jenkins,安装使用一条龙教程

Jenkins k8s 实现CI/CD 一、简介 1. JenKins是什么? Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 2. 什么是CI / CD…...

图像识别技术与应用-YOLO

1 YOLO-V1 YOLO-V1它是经典的one-stage方法&#xff0c;You Only Look Once&#xff0c;名字就已经说明了一切&#xff01;把检测问题转化成回归问题&#xff0c;一个CNN就搞定了&#xff01;也可以对视频进行实时检测&#xff0c;应用领域非常广&#xff01; YOLO-V1诞生与2…...

【网络通信安全】子专栏链接及简介

目录 操作系统安全&#xff1a;筑牢网络安全根基​ 网络协议安全&#xff1a;守护数据传输通道​ Web 站点安全开发&#xff1a;打造安全的网络交互平台​ 在数字化浪潮席卷的当下&#xff0c;网络通信已深度融入生活与工作的方方面面&#xff0c;从日常的线上购物、社交互动…...

Oracle比较好的几本书籍

1.《Oracle专家高级编程》 2.《Oracle高效设计》 3.《Oracle9i&10g&11g编程艺术深入数据库体系结构》 4.《让Oracle跑的更快》(1/2) ....... n.《Oracle官方文档的阅读》下面包括这几个部分&#xff0c;可以跟进研读一下&#xff1a; &#xff08;1&#xff09;《…...

忘记dedecms后台超级管理员账号和密码的解决方案

解决方案&#xff1a; 方案一、数据库修改&#xff1a; 1、前提是您能登录到数据库后台&#xff0c;登录MySQL数据库管理工具&#xff08;如phpMyAdmin&#xff09; 2、打开数据库中的 dede_admin 表&#xff0c;找到管理员记录&#xff0c;将 pwd 字段的值改成 f297a57a5a7…...

处理动态分页:自动翻页与增量数据抓取策略-数据议事厅

一、案例场景 Lily&#xff08;挥舞着数据报表&#xff09;&#xff1a;“用户反馈我们的股票舆情分析总是缺失最新跟帖&#xff01;这些动态分页像狡猾的狐狸&#xff0c;每次抓取都漏掉关键数据&#xff01;” 小王&#xff08;调试着爬虫代码&#xff09;&#xff1a;“传…...

微服务新手入门

一、微服务概念 微服务是一种软件架构风格&#xff0c;ta是以专注于单一职责的很多小型项目为基础&#xff0c;组合出复杂的大型应用。 微服务 - 服务拆分 - 远程调用 - 服务治理 - 请求路由 - 身份认证 - 配置管理 - 服务保护 - 分布式事务 - 异步通信 - 消息可靠性 - 延迟消…...

antd浏览器引入的问题

1&#xff0c;在使用ant design vue的4.1.2版本通过浏览器引入的方式遇到的问题&#xff0c;遇到的问题&#xff08;不确定其他版本有没有问题&#xff09;&#xff0c;通过在页面使用下面的代码 <a-modal v-model:open"apiOpen" title"修改秘钥" ok&q…...

STM32-Unix时间戳

一&#xff1a;什么是时间戳 Unix时间戳&#xff08;Unix Timestamp&#xff09;是一个计数器数值&#xff0c;这个数值表示的是一个从1970年1月1日0时0分0秒开始到现在所经过的秒数&#xff0c;不考虑闰秒。 时间戳存储在一个秒计数器里&#xff0c;秒计数器为32位/64位的整…...

【性能测试】Jmeter如何做一份测试报告(3)

本篇文章主要介绍Jmeter中下载插件&#xff08;Jmeter Plugins&#xff09; 如何使用监听器插件&#xff0c;线程组插件&#xff0c;梯度压测线程组 测试报告需要去关注的数据&#xff0c;怎么看测试报告图表 目录 一&#xff1a;插件下载 1&#xff1a;下载地址 2&#xff…...

游戏引擎学习第153天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 目前正在进行的是一个比较大的系统调整&#xff0c;原本预计今天会继续深入这个改动&#xff0c;但实际上在昨天的开发中&#xff0c;我们已经完成了大部分的代码编写&#xff0c;并且运行之后几乎一切都能正常工作&#x…...

CentOS7下安装MongoDB

步骤 1&#xff1a;创建 MongoDB Yum 仓库文件 你需要创建一个 MongoDB 的 Yum 仓库配置文件&#xff0c;以便从官方源下载 MongoDB。打开终端并使用以下命令创建并编辑该文件&#xff1a; sudo vi /etc/yum.repos.d/mongodb-org-7.0.repo 在打开的文件中&#xff0c;输入以下…...

Elasticsearch-07-Elasticsearch Java API Client-Elasticsearch 8.0 的高阶api

文章目录 es8 API基础配置和bean注入高阶使用1&#xff1a;引入elasticsearchClient2&#xff1a;查询所有索引3&#xff1a;查询某个索引4:创建索引5:删除指定索引6:查询索引的映射7:创建索引指定映射8:创建文档使用HashMap作为数据存储容器使用自定义类作为数据存储容器使用外…...

【性能优化】MySQL 生产环境 SQL 性能优化实战案例

&#x1f680; MySQL 生产环境 SQL 性能优化实战案例 &#x1f3d7;️ 背景介绍 最近在处理一个项目时&#xff0c;发现在生产环境的工作流相关接口中&#xff0c;某些查询的执行时间异常缓慢&#xff0c;尽管数据量仅为 2 万条。经过分析&#xff0c;发现以下 SQL 语句执行非…...

Docker容器安装软件(完整版)

文章目录 一、安装Docker1.1 docker 相关的命令1.2 配置镜像加速 二. 安装es2.1 创建网络2.2 拉取镜像2.3 创建挂载点目录2.4 部署单点es&#xff0c;创建es容器2.5 编写elasticsearch.yml2.6 重启es容器2.7 测试Elasticsearch是否安装成功 三. 基于Docker安装Kibana3.1 拉取镜…...

DeepSeek-进阶版部署(Linux+GPU)

前面几个小节讲解的Win和Linux部署DeepSeek的比较简单的方法&#xff0c;而且采用的模型也是最小的&#xff0c;作为测试体验使用是没问题的。如果要在生产环境使用还是需要用到GPU来实现&#xff0c;下面我将以有一台带上GPU显卡的Linux机器来部署DeepSeek。这里还只是先体验单…...

11. Pandas :操作Excel文件(Excel报表的案例研究)

从一个装有各种 Excel 文件的文件夹开始&#xff0c;这些文件需要被整合到 Excel 报表中。 它们包含了虚构的电信运营商在全美各营业厅的套餐&#xff08;金、银、铜&#xff09;销售情况。每个月有两个文件&#xff0c;子文件夹 new 中的是新用户&#xff0c;子文件夹 existin…...