青少年编程与数学 02-016 Python数据结构与算法 24课题、密码学算法
青少年编程与数学 02-016 Python数据结构与算法 24课题、密码学算法
- 课题摘要:
- 一、对称加密算法
- AES(高级加密标准)
- DES(数据加密标准)
- 3DES(三重数据加密标准)
- 二、非对称加密算法
- RSA
- ECC(椭圆曲线密码学)
- 三、哈希算法
- SHA-256
- MD5
- SHA-1
- 四、消息认证码(MAC)
- HMAC(基于哈希的消息认证码)
- 五、密钥交换算法
- DH(Diffie-Hellman)
- ECDH(椭圆曲线Diffie-Hellman)
- 总结
课题摘要:
密码学作为信息安全领域的重要组成部分,涵盖了从数据加密到身份验证和信息完整性等多个方面。根据应用场景的不同,密码学算法大致可以分为对称加密、非对称加密、哈希函数、消息认证码(MAC)以及密钥交换算法等几大类。
关键词:对称加密算法、AES、DES、3DES、加密、解密、公钥、私钥、非对称加密、RSA、ECC、哈希算法、SHA-256、MD5、SHA-1、数字签名、哈希函数、消息认证码(MAC)、密钥交换算法
一、对称加密算法
对称加密算法使用相同的密钥进行加密和解密,其特点是加密速度快,适合处理大量数据。
AES(高级加密标准)
AES 是目前广泛使用的对称加密算法,支持128、192和256位密钥长度。
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytesdef aes_encrypt(key, data):cipher = AES.new(key, AES.MODE_EAX)nonce = cipher.nonceciphertext, tag = cipher.encrypt_and_digest(data.encode())return nonce, ciphertext, tagdef aes_decrypt(key, nonce, ciphertext, tag):cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)plaintext = cipher.decrypt(ciphertext)try:cipher.verify(tag)return plaintext.decode()except ValueError:return None
DES(数据加密标准)
DES 是早期的对称加密算法,现已被认为不够安全,通常不再使用。
from Crypto.Cipher import DESdef des_encrypt(key, data):cipher = DES.new(key, DES.MODE_ECB)ciphertext = cipher.encrypt(data.encode())return ciphertextdef des_decrypt(key, ciphertext):cipher = DES.new(key, DES.MODE_ECB)plaintext = cipher.decrypt(ciphertext)return plaintext.decode()
3DES(三重数据加密标准)
3DES 是对DES的增强版,通过三次加密提高安全性,但速度较慢。
from Crypto.Cipher import DES3def des3_encrypt(key, data):cipher = DES3.new(key, DES3.MODE_ECB)ciphertext = cipher.encrypt(data.encode())return ciphertextdef des3_decrypt(key, ciphertext):cipher = DES3.new(key, DES3.MODE_ECB)plaintext = cipher.decrypt(ciphertext)return plaintext.decode()
二、非对称加密算法
非对称加密算法使用一对密钥:公钥和私钥。公钥用于加密,私钥用于解密。
RSA
RSA 是最常用的非对称加密算法,基于大数分解的数学难题。
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEPdef rsa_encrypt(public_key, data):cipher = PKCS1_OAEP.new(public_key)ciphertext = cipher.encrypt(data.encode())return ciphertextdef rsa_decrypt(private_key, ciphertext):cipher = PKCS1_OAEP.new(private_key)plaintext = cipher.decrypt(ciphertext)return plaintext.decode()
ECC(椭圆曲线密码学)
ECC 基于椭圆曲线数学,提供相同安全级别下更小的密钥尺寸。
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import utilsdef ecc_encrypt(public_key, data):# ECC 加密示例(需要具体实现)passdef ecc_decrypt(private_key, ciphertext):# ECC 解密示例(需要具体实现)pass
三、哈希算法
哈希算法将任意长度的数据映射为固定长度的哈希值,广泛用于数据完整性验证和数字签名。
SHA-256
SHA-256 是属于SHA-2系列的哈希算法,广泛应用于区块链和数字货币。
import hashlibdef sha256(data):return hashlib.sha256(data.encode()).hexdigest()
MD5
MD5 虽然使用广泛,但由于安全性问题,已不再推荐用于安全敏感的应用。
import hashlibdef md5(data):return hashlib.md5(data.encode()).hexdigest()
SHA-1
SHA-1 曾经广泛使用,但由于发现安全漏洞,现已逐渐被淘汰。
import hashlibdef sha1(data):return hashlib.sha1(data.encode()).hexdigest()
四、消息认证码(MAC)
消息认证码是一种用于验证消息完整性和身份的算法,通常结合哈希算法或对称加密算法使用。
HMAC(基于哈希的消息认证码)
HMAC 结合哈希函数和密钥生成的MAC,安全性高。
import hmacdef hmac_sha256(key, data):return hmac.new(key.encode(), data.encode(), hashlib.sha256).hexdigest()
五、密钥交换算法
密钥交换算法用于在不安全的通信渠道上,帮助双方协商出一个共享的密钥,后续用于对称加密。
DH(Diffie-Hellman)
DH 基于离散对数问题的数学困难性,双方通过交换公开参数生成共享密钥。
from cryptography.hazmat.primitives.asymmetric import dh
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashesdef dh_key_exchange():# DH 密钥交换示例(需要具体实现)pass
ECDH(椭圆曲线Diffie-Hellman)
ECDH 基于椭圆曲线离散对数问题(ECDLP),将DH的运算迁移到椭圆曲线群上,效率更高。
from cryptography.hazmat.primitives.asymmetric import ecdef ecdh_key_exchange():# ECDH 密钥交换示例(需要具体实现)pass
这些密码学算法在不同的场景下具有各自的优势和适用性,可以根据具体需求选择合适的算法,并注意算法的安全性和效率。
总结
密码学作为信息安全领域的重要组成部分,涵盖了从数据加密到身份验证和信息完整性等多个方面。根据应用场景的不同,密码学算法大致可以分为对称加密、非对称加密、哈希函数、消息认证码(MAC)以及密钥交换算法等几大类。
对称加密算法如AES、DES和3DES使用相同的密钥进行加密和解密,其中AES因高效且安全成为最常用的加密标准。非对称加密则采用公钥与私钥的配对,RSA和ECC是其典型代表,尤其ECC在提供相同安全级别下具有更小的密钥尺寸,从而更加高效。哈希算法,例如SHA-256、MD5和SHA-1,用于生成固定长度的哈希值,广泛应用于数据完整性和数字签名中,但MD5和SHA-1由于安全性问题已不再推荐用于敏感场景。消息认证码(MAC),特别是基于哈希的HMAC,结合了哈希函数和密钥来确保消息的完整性和身份验证。最后,密钥交换算法如DH和ECDH允许双方在不安全的通信渠道上协商出一个共享密钥,以供后续加密通信使用。
综上所述,选择合适的密码学算法需考虑多方面因素,包括但不限于所需的安全性水平、执行效率及具体的应用场景。正确应用这些算法不仅能够保护数据免受未授权访问,还能确保信息传输的保密性和完整性。
相关文章:
青少年编程与数学 02-016 Python数据结构与算法 24课题、密码学算法
青少年编程与数学 02-016 Python数据结构与算法 24课题、密码学算法 课题摘要:一、对称加密算法AES(高级加密标准)DES(数据加密标准)3DES(三重数据加密标准) 二、非对称加密算法RSAECC(椭圆曲线…...
艺术字体AI生成阿里云WordArt锦书、通义万相、SiliconFlow、Pillow+OpenCV本地生成艺术字体
基于您的需求,结合最新API技术和搜索结果,以下是Python调用主流艺术字API的代码案例及对应充值链接方案: 一、大厂API服务(付费方案) 1. 阿里云WordArt锦书API # 文字纹理生成(需安装dashscopeÿ…...
GIS开发笔记(7)结合osg及osgEarth实现不同高度下的三个圆形区域形成的三维覆盖轮廓区域绘制
一、实现效果如下: 二、实现原理 输入四个坐标点,第一个点为中心点,第二三四个点分别以中心点与地面垂线所在线上的各自高度水平面的交点为圆心旋转360进行圆形区域绘制,然后将三个不同高度上的圆形区域进行结合形成三维覆盖区域…...
解决 Kubernetes 调度器启动报错:缺少 Bind 插件
解决 Kubernetes 调度器启动报错:缺少 Bind 插件 问题描述 在启动自定义 Kubernetes 调度器时,出现了以下错误: I0416 17:08:41.420188 68788 configfile.go:57] "KubeSchedulerConfiguration v1beta2 is deprecated in v1.25, wil…...
Spring Batch 专题系列(六):并行处理与性能优化
1. 引言 在上一篇文章中,我们学习了 Spring Batch 的错误处理机制(Skip、Retry、Restart 和 Listener),掌握了如何提升作业的健壮性。随着数据量的增加,批处理任务的性能成为关键挑战。Spring Batch 提供了强大的并行处理功能,包括多线程 Step、分区(Partitioning)和并…...
WPF 从Main()方法启动
1.去掉App.xaml StartupUri“MainWindow.xaml” 只会让App.g.cs 不生成这行代码,但是还是会生成的App.g.cs文件中生成Main方法 this.StartupUri new System.Uri("MainWindow.xaml", System.UriKind.Relative);默认的App.xaml的生成操作是 应用程序定义…...
记录小程序第一次调用Api,基于腾讯云Serverless函数,实现小程序的成功接入api,以及数据调用
目录 创建腾讯云个人账户新建severless应用建立函数URL小程序中调用api示例 创建腾讯云个人账户 百度搜索即可,并注册 新建severless应用 作者以github下载的某Api为例,这里不展示具体Api,只关注操作即可,相信都是互通的 在腾…...
「数据可视化 D3系列」入门第四章:DOM操作与元素管理
DOM操作与元素管理 核心技能:元素选择与操作一、元素选择:精准定位DOM节点基础选择方法对比进阶选择技巧 二、元素插入:动态构建DOM结构append() vs insert()实际应用示例 三、元素删除:优雅移除DOM节点删除操作最佳实践 四、内容…...
突发重磅消息!!!CVE项目将被取消?
突发重磅消息!!!CVE项目将被取消?突发!来自可靠消息来源。MITRE 对 CVE 项目的支持将于明天到期。附件信件已发送给 CVE 董事会成员。https://mp.weixin.qq.com/s/N3qkiHaDfzDuBMK3JbBCjw...
基于uniapp的鸿蒙APP大数据量性能优化
文章目录 一、问题诊断与性能瓶颈分析1.1 大数据场景下的典型性能问题1.2 性能监测工具使用1.2.1 HBuilderX内置分析器1.2.2 鸿蒙DevEco工具链1.2.3 自制性能埋点 二、数据加载优化方案2.1 分页加载实现(带错误重试机制)2.2 数据流优化策略2.2.1 数据压缩…...
【算法】归并排序
算法系列七:归并排序 一、归并排序的递归探寻 1.思路 2.搭建 2.1设计过掉不符情况(在最底层时) 2.2查验能实现基础排序(在最底层往上点时) 2.3跳转结果继续往上回搭 3.实质 4.实现 二、递归的调用栈 1.递归的…...
【JavaScript】二十三、M端事件 + 轮播图Swiper插件
文章目录 1、M端事件2、swiper插件2.1 插件2.2 轮播图插件Swiper的使用 3、案例:学生信息表 1、M端事件 移动端有一个独有的事件:触屏事件 touch(也称触摸事件),Android 和 IOS 都有,touch 对象代表一个触摸点。触摸点可能是一根…...
【Spring】DI(依赖注入)详解:属性注入@Autowired(超详细)、构造方法注入、Setter注入
1.DI(依赖注入)介绍 1.1DI是什么? DI(Dependency Injection,依赖注入) 是 Spring 框架中实现 IoC(控制反转)的一种核心机制。如果说 IoC 是一种设计思想,告诉我们“把控…...
Spring Boot 中配置 Redis 连接池的详细
目录 一、添加依赖二、配置 Redis 连接池(一)通过 Java 配置类(二)通过 application.properties 文件 三、测试 Redis 操作四、总结 一、添加依赖 在 pom.xml 文件中添加以下依赖: <dependencies><dependen…...
系统架构设计师:系统架构概述案例分析与简答题、详细解析与评分要点
10道系统架构概述知识体系案例分析与简答题,涵盖架构设计原则、质量属性、演化过程、评估方法等核心考点,并附详细解析与评分要点: 一、案例分析题(5题) 1. 电商系统高并发场景下的架构设计 背景:某电商平…...
关于系统架构思考,如何设计实现系统的高可用?
绪论、系统高可用的必要性 系统高可用为了保持业务连续性保障,以及停机成本量化,比如在以前的双十一当天如果出现宕机,那将会损失多少钱?比如最近几年Amazon 2021年30分钟宕机损失$5.6M。当然也有成功的案例,比如异地…...
阿里云短信服务与ASP.NET对接实例
准备工作 注册阿里云账号并开通阿里大于(现称"阿里云短信服务")服务 获取AccessKey ID和AccessKey Secret 申请短信签名和短信模板并审核通过 ASP.NET Web项目集成步骤 1. 安装阿里云SDK 通过NuGet包管理器安装阿里云短信服务SDK: Install-Package…...
【含文档+PPT+源码】基于微信小程序健康管理之健身房管理系统的设计与实现
课程目标: 教你从零开始部署运行项目,学习环境搭建、项目导入及部署,含项目源码、文档、数据库、软件等资料 课程简介: 本课程演示的是一款基于微信小程序健康管理之健身房管理系统的设计与实现,主要针对计算机相关…...
微信小程序转为App实践篇 FinClip
参考下面链接先 开始实践 微信小程序转为App并上架应用市场_微信小程序生成app-CSDN博客 首先在FinClip 官网上下载应用 小程序开发工具下载_小程序sdk下载资源-FinClip资源下载|泰坪小程序开放平台 下载到本地安装 打开导入自己的小程序项目;导入时会解析自己的…...
Qt/C++学习系列之QTreeWidget的简单使用记录
Qt/C学习系列之QTreeWidget的简单使用记录 前言1布局1.1布局要求1.2布局代码 2代码设计2.1整体勾选2.2勾选项确认 总结 前言 自己练手的项目中,需要对多个不同层级的选项进行勾选操作,而想到简洁点的操作方式就是使用QTreeWidget进行布局与应用。这里简…...
标易行项目redis内存中放哪些数据
结合你的项目经验,以下是 标易行投标服务平台 中 Redis 内存存储的核心数据类型及具体应用场景分析: 1. 用户订阅配置与实时推送 场景需求:用户订阅招标商机后,系统需实时推送符合订阅条件(如行业、区域、关键词)的标讯。Redis 存储数据: 订阅规则缓存:以 Hash 存储用户…...
redis 放置序列化的对象,如果修改对象,需要修改版本号吗?
在 Redis 中存储序列化对象时,如果修改了对象的类结构(例如增删字段、修改字段类型或顺序),是否需要修改版本号取决于序列化协议的兼容性策略和业务场景的容错需求。以下是详细分析: 1. 为什么需要考虑版本号? 序列化兼容性问题: 当对象的类结构发生变化时,旧版本的序列…...
MySQL——流程控制
一、IF条件语句 语法 IF condition THENstatements; ELSEIF condition THENstatements; ELSEstatements; END IF; 判断成绩等级 # 判断成绩等级 # 输入学生的编号,取出学生的第一门课,然后判断当前的课程的等级 drop procedure if exists p2; delimiter $$ crea…...
蓝桥杯 1.路径之谜
1.路径之谜 原题目链接 问题描述 小明冒充 X 星球 的骑士,进入了一个奇怪的城堡。城堡里边什么都没有,只有方形石头铺成的地面。假设城堡的地面是 n n 的方格,如下图所示: 骑士要从西北角走到东南角。可以横向或纵向移动&…...
学习笔记十二——Rust 高阶函数彻底入门(超详细过程解析 + 每步数值追踪)
💡 彻底搞懂 Rust 高阶函数!新手最容易卡住的语法 调用流程全讲透(含逐步拆解) Rust 函数式编程中有一个常见却经常让人懵的概念:高阶函数(Higher-Order Function) 一看到 fn(i32) -> i32、…...
Spring Cache(笔记)
简介: 常用注解:...
MySQL入门:数据表的创建
今天我们来介绍一下除HTML外的另一种语言:MySQL语言; MySQL:即一种用于管理和处理关系数据库的标准语言。要用于执行查询、更新、管理数据库中的数据以及定义和操作数据库结构。 接下来我会逐一介绍它的作用以及其中数据表,数据…...
Vue3服务端渲染(SSR)深度调优:架构裂变与性能突围
一、全链路渲染管控系统 1.1 智能DNS路由策略 1.2 区域化渲染成本矩阵 区域计算成本($/h)网络成本($/GB)命中率QoS保障等级北美东部0.240.0892%SLA-99.9亚太东南0.280.1285%SLA-99.5欧洲西部0.310.1588%SLA-99.7南美圣保罗0.350.1878%SLA-99.0 二、多维度缓存治理策略 2.1 量…...
Python基础语法2
目录 1、顺序语句 2、条件语句 2.1、语法格式 2.2、缩进和代码块 3、空语句 4、循环语句 4.1、while循环 4.2、for循环 4.3、continue 4.4、break 5、综合案例 1、顺序语句 默认情况下,Python 的代码执行顺序是按照从上到下的顺序,依次执行的…...
部署LLaMA Factory,及快速使用
什么是LLaMA Factory LLaMA Factory 是一个围绕 Meta 的 LLaMA(Large Language Model Meta AI)模型设计的工具或代码结构,主要用于简化模型的创建、管理和部署。以下是其关键点解析: 1. 核心概念 LLaMA 模型&a…...
11.第二阶段x64游戏实战-框架代码细节优化
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:10.第二阶段x64游戏实战-添加计时器 首先是这个GameData类,我们要让…...
Spring Boot 中使用 Netty
2025/4/15 向 一、什么是Netty Netty 是 Java 中一个非常高性能的网络通信框架,用来开发服务器和客户端程序,主要用于处理 TCP/UDP 的网络连接,比如: 聊天服务 实时推送 高并发网络通信(比如游戏、IoT、金融系统&a…...
【Leetcode-Hot100】最大子数组和
题目 解答 class Solution(object):def maxSubArray(self, nums):""":type nums: List[int]:rtype: int"""len_nums len(nums)result -1e5left_fit, right_fit 0, len_nums-1if len_nums 1:return nums[0]sum_left, sum_right 0, 0while r…...
Android 项目 Camera 问题:Fail to connect to camera service
问题与处理策略 问题描述 在 Android 项目中,使用相机时,报如下错误 java.lang.RuntimeException: Fail to connect to camera service# 翻译无法连接到相机服务问题原因 通常情况是应用没有获取到相机权限,导致连接相机服务失败 Android…...
Java二叉树深度解析:结构、算法与应用实践指南
一、二叉树核心概念体系 1. 二叉树基础定义 graph TBA((根节点)) --> B((左子节点))A --> C((右子节点))B --> D((叶子节点))B --> E((叶子节点))C --> F[null]C --> G((叶子节点)) 2. 二叉树类型对比 类型结构特性典型应用场景普通二叉树任意节点最多两…...
阿里FPGA XCKU3P开箱- 25G 光纤
阿里FPGA XCKU3P开箱 - Hello-FPGA - 博客园 25G 光纤 板子有2个SFP的光纤接口,最大支持25G速率,使用ibert 进行验证,SFP在BANK227的GTY 接口。 ibert 配置如下: 测试 测试符合预期,确认了SFP的具体位置 和 支持的速…...
深度学习之微积分
2.4.1 导数和微分 2.4.2 偏导数 回调函数(3)C#
原接口定义请参照高级语言调用C接口(二)回调函数(2) 我们直接来看C#的接口定义 [DllImport("XXX.dll")]public static extern IntPtr Init(string pcPayDeviceIP, int usTlsPort, OnPayResult onPayResult); 委托定义 [UnmanagedFunctionPointer(CallingConvention…...
ns-3中UDP饱和流发包时间间隔设置最合理值
ns3的官方手册很全,相关书籍也是有的,官网先贴在这里: ns-3 | a discrete-event network simulator for internet systemsa discrete-event network simulator for internet systemshttps://www.nsnam.org/相关的脚本介绍也都有一些…...
深度学习(第1章——神经网络原理和Pytorch入门)
前言: 本章将讲解神经网络原理,神经元如何处理输入并输出,什么是梯度,多层感知机中梯度的计算,Pytoch自动梯度效果,如何使用原生Python实现一个简单的神经网络,以及对应Pytorch实现。 神经网络原…...
使用DeepSeek AI高效降低论文重复率
一、论文查重原理与DeepSeek降重机制 1.1 主流查重系统工作原理 文本比对算法:连续字符匹配(通常13-15字符)语义识别技术:检测同义替换和结构调整参考文献识别:区分合理引用与不当抄袭跨语言检测:中英文互译内容识别1.2 DeepSeek降重核心技术 深度语义理解:分析句子核心…...
【3D文件】3D打印迪迦奥特曼,3D打印的迪迦圣像,M78遗迹管理局,5款不同的3D打印迪迦免费下载,总有一款适合你
【3D文件】3D打印迪迦奥特曼,3D打印的迪迦圣像,M78遗迹管理局,5款不同的3D打印迪迦免费下载,总有一款适合你 资源下载: 3D文件AI生成器,机器学习生成,AI生成3D文件,3D打印迪迦奥特…...
【未解决】Spring AI 1.0.0-M6 使用 Tool Calling 报错,请求破解之法
1.报错 2.Java 代码 2.1 pom.xml <dependencyManagement><dependencies><!-- Spring AI --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-M6</ver…...
第 2 篇:快速上手 Framer Motion(实操入门)
1. 环境准备 在开始使用 Framer Motion 之前,你需要先确保你的开发环境中已经设置好了 React 项目。我们将使用 Next.js 作为示例,如果你是使用其他 React 框架,步骤也基本相同。 1.1 创建一个 Next.js 项目 如果你还没有创建 Next.js 项目…...
如何写好合同管理系统需求分析
引言 在当今企业数字化转型的浪潮中,合同管理系统作为企业法律合规和商业运营的重要支撑工具,其需求分析的准确性和完整性直接关系到系统建设的成败。本文基于Volere需求过程方法论,结合江铃汽车集团合同管理系统需求规格说明书实践案例&…...
C语言自定义类型详解一:结构体(内存对齐)
结构体的声明: 结构体是一些值的集合,这些值是成员变量,结构体的每个成员可以是不同类型的变量(包括其他结构体变量) 类如:描述一个学生 struct Stu {char name[200];int age;char sex[5];//性别char id…...
GitHub配置密钥
1.生成SSH密钥 1)检查 SSH 密钥是否存在 首先,确认是否已经在本地系统中生成了 SSH 密钥对。可以通过以下命令检查: ls -al ~/.ssh 在命令输出中,应该能看到类似 id_rsa 和 id_rsa.pub 这样一对文件。如果这些文件不存在&#…...
PyTorch逻辑回归总结
目录 PyTorch逻辑回归总结神经网络基础基本结构学习路径 线性回归简单线性回归多元线性回归 逻辑回归核心原理损失函数 梯度下降法基本思想关键公式学习率影响 PyTorch实现数据准备模型构建代码优化 核心概念对比 PyTorch逻辑回归总结 神经网络基础 基本结构 输入节点隐藏节…...