对称密码学
1. 使用OpenSSL 命令行
在 Ubuntu Linux Distribution (发行版)中, OpenSSL 通常可用。当然,如果不可用的话,也可以使用下以下命令安装 OpenSSL:
$ sudo apt-get install openssl
安装完后可以使用以下命令检查 OpenSSL 版本:
$ openssl version
其输出将如下所示:
OpenSSL 1.0.2 1 Mar 2016
2. 密码学简介
密码学(Cryptography) 是在面对敌手时确保信息安全的科学。这里有一个前提设想是,敌手(或者说对手) 可以使用无限的资源。密码(Ciphers) 是用于加密或解密数据的算法,如果对手拦截到该数据,但是无法解密(Decryption),那么该数据就是无意义的,而解密需要密钥。
密码学主要用于提供保密服务,它本身不能被认为是一个完整的解决方案,而是在更广泛的安全系统中解决安全问题的关键组成部分。例如,保护区块链生态系统需要许多不同的密码学原语,如哈希函数、对称密钥密码学、数字签名和公共密钥密码学等。
除保密服务外,加密技术还提供其它安全服务,如完整性(Integrity) 、不可否认性(Non-Repudiation) 和 身份验证(Authentication) --包括实体身份验证和数据源身份验证。另外,它还提供可追责性(Accountability) ,这是许多安全系统的要求。可追责性可以解决电子现金双重支付的问题。
3. 密码学的数学基础
3.1 集合
集合(Set,记为 S) 就是将不同的对象放在一起,例如 S= {1,2,3,4,5}。
3.2 群
群(Group,记为 G)是定义了一个二元运算的交换集合,该运算组合了集合的两个元素。群运算是分闭的,并全对于已定义的标识元素来说是可结合的。另外,集合中的每个元素都有一个逆(Inverse)。
具体来说,G 中的每个序偶(a,b)通过运算生成 G 中的元素(a,b),并满足以下公理。
封闭性:封闭(Closure)意味着如果元素 a 和 b 在集合中,则对元素执行运算后得到的元素也将在集合中,即如果 a 和 b 都属于 G,则 a.b 也属于 G。
结合律:结合(Associative) 意味着元素的分组不分影响运算的结果。例如,对于 G 中的任意元素a,b,c,都有:
(a.b).c=a.(b.c)
单位元:G 中存在一个元素 e,对于任意元素 都有:
a.e=e.a=a
逆元:对于 G 中的任意元素 a,都存在一个元素 a' G,使得下式成立:
a.a' = a'.a =e
3.3 域
域(Field,记为 F) 是一个包含加法和乘法群的集合。更确切地说,集合中的所有元素都构成一个加法和乘法群。它满足加法运算和乘法运算的特定公理(即上面介绍的封闭性、结合律、单位元和逆元)。
4. 密码学模型
下图显示了通用密码学模型

在上图中,P 表示纯文本( Plaintext), E 表示加密(Encryption),C 表示密文(Ciphertext),D 表示解密(Decryption)。基于该模型,对实体、发送者、接收者、对手、密钥和信道等概念的解释如下:
实体:发送、接收数据或执行运算的个人或系统。
发送者:发出数据的实体
接收者:接收数据的实体
对手:试图绕开或破解安全服务的实体。
密钥:用于加密或解密其他数据的数据。
信道:为实体之间的沟通提供一种媒介。
5. 现代信息安全的基本要求
现代信息安全的基本要求包括 5 项,即保密性、完整性、可认证性、不可否认性和可追责性。
5.1 保密性
保密性(Confidentiality) 是指应确保信息仅对授权实体可用,防止将信息泄露给未经授权的人,这涉及加密和解密技术的应用。
5.2 完整性
完整性(Integrity) 是指应确保仅授权实体能够修改信息,防止信息出现未经授权的篡改,这涉及消息认证码和数字签名等技术的应用。
5.3 可认证性
认证(Authentication) 可确保有关实体的身体或消息的有效性,保证信息来自正确的发送者,这涉及消息认证和数字签名等技术的应用。
6. 密码学原语
密码学原语(Cryptographic Primitives) 是安全协议或系统的基本构建块。
所谓安全协议(Security Protocol) 就是指要采取的一组步骤,它通过利用适当的安全机制来实现所需的安全目标。目前正在使用的安全协议有多种类型,如认证协议、不可否认协议和密钥管理协议等。
密码学原语的分类如下图所示:

7. 对称密码学介绍
7.1 流密码

7.2 分组密码

8. 分组密密码加密模式
分组密码的加密工作模式允许使用同一个分组密码对多于一块的数据进行加密,并保证其安全性。
在分组加密模式下,根据使用的密码类型,将明文分为固定长度的块。然后,将加密函数应用于每个块。
8.1 电子密码本
电子密码本(Electronic Code Book,ECB)是一种基本的操作模式。在该模式中,通过将加密算法一对一地应用于每个明文块来生成加密数据。这是最直接的加密模式,但是由于它不太安全并且可以泄露信息,因此在实践中已不建议使用。
分组密码的电子密码本模式如下图所示:

在上图中可以看到,我们提供了明文 P 作为分组密码加密函数的输入,再加上密钥 KEY,共同产生密文 C 作为输出。
8.2 密码块链接
在密码块链接(Cipher Block Chaining,CBC)模式下,每个明文块都与先前加密的块进行 XOR 运算。CBC 模式使用初始化向量(Initialization Vector,IV) 加密第一个块。建议随机选择 IV,如下图所示:

8.3 计数器模式
计数器 (Counter,CTR) 模式有效地使用了分组密码作为流密码。在这种情况下,将提供一个唯一的随机数,该随机数与计数器值连接以生成密钥流,如下图所示:

9. 密钥流生成模式
在密钥流生成模式(Keystream Generation Mode) 下,加密函数可生成一个密钥流,然后将其与纯文本流进行 XOR 运算以实现加密。
9.1 消息认证模式
在消息认证模式(Message Authentication Mode) 下,消息认证代码(Message Authentication Code,MAC) 来自加密函数。MAC 是提供完整性服务的加密校验和。使用分组密码生成 MAC 的最常见方法是 CBC-MAC。在 CBC-MAC 中,链的最后一块的一部分用作 MAC。例如,MAC 可用于确认消息是否由未授权实体修改,这可以通过 MAC 函数使用密钥对消息进行加密来实现。具体方法是:接收者在接收到消息后,使用密钥再次对接收到的消息进行加密,并将其与从发送者接收到的 MAC 进行比较,如果它们都匹配,则可知消息未被授权的用户修改,这就是 MAC 能提供完整性服务的原理;如果它们都不匹配,则表示消息在传输过程中未授权实体修改过。
9.2 加密哈希模式
哈希函数主要用于将消息压缩为固定长度的摘要。在密码哈希模式(Cryptographic Hash Mode)下,分组密码用作压缩函数以生成纯文本哈希。
10. 数据加密标准
当前市场主导的分组密码是高级加密标准(AES),我们将介绍 AES 的设计和机制。但是,在讨论 AES 之前,有必要先介绍一下数据加密标准(Data Encryption Standard,DES)的历史,因为正是 DES 促进了新 AES 标准的开发。
数据加密标准由美国国家标准技术研究院(National Institute of Standards and Technology,NIST)引入,作为加密的标准算法,在 20 世纪 80 年代和 90 年代被广泛使用。但是,由于技术和密码学研究的进步,它并不能被证明对暴力破解攻击(Brute Force Attack) 具有很强的抵抗力。例如,1998 年 7 月,电子前沿基金会(Electronic Frontier Foundation,EFF)就使用 EFF DES Cracker (或 Deep Crack) 的专用机器破坏了 DES。
DES 仅使用 56 位密钥,这引起了人们的一些担忧。该问题通过引入三重 DES(Triple DES,3DES) 获得了解决,3DES提出了使用 168 位密钥,方法是将 DES 算法执行 3 次以获得 3 个 56 位密钥,这样暴力破解攻击就几乎不可能成功。但是,3DES 轮的数量众多而计算速度慢,分组长度为 64 位而效率低下,从而难以用软件有效实现。
以下是有关如何使用 AES 进行加密和解密的 OpenSSL 示例:
openssl enc -aes-256-cbc -in message.txt -out message.bin
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:

OpenSSL 工具可用于下图显示的所有密码:

相关文章:
对称密码学
1. 使用OpenSSL 命令行 在 Ubuntu Linux Distribution (发行版)中, OpenSSL 通常可用。当然,如果不可用的话,也可以使用下以下命令安装 OpenSSL: $ sudo apt-get install openssl 安装完后可以使用以下命令检查 OpenSSL 版本&am…...
正则表达式优化建议
文章目录 优化正则表达式代码示例:注意事项: 一些常见的正则表达式陷阱 优化正则表达式是提高文本处理效率和准确性的重要步骤。以下是一些优化正则表达式的方法: 以下是整理归纳后的正则表达式优化技巧: 优化正则表达式 一、预…...
Oracle RAC关于多节点访问同一个数据的过程
一、说明 Oracle RAC 存在多个计算节点,但是使用的共享存储。那么多个节点共同访问同一个资源,怎么保证一致性。 白文的逻辑理解简述: 用户1访问rac1 ,通过rac1获取AA数据块后,会加上latch锁。用户2通过rac2访问AA数据…...
IPC$漏洞多位密码爆破方法
虽然不应该将其用于非法的密码破解行为,但从代码修改角度来说,如果要破解多位密码(比如 n 位),你可以按照以下方式调整: 破解多位纯数字密码 如果你想破解 6 位纯数字密码: FOR /L %%i IN (100000,1,999999) DO (net use \\target - ip\ipc$ /user:weak %%i &&…...
计算机网络(八股文)
这里写目录标题 计算机网络一、网络分层模型1. TCP/IP四层架构和OSI七层架构⭐️⭐️⭐️⭐️⭐️2. 为什么网络要分层?⭐️⭐️⭐️3. 各层都有那些协议?⭐️⭐️⭐️⭐️ 二、HTTP【重要】1. http状态码?⭐️⭐️⭐️2. 从输入URL到页面展示…...
Docker打包镜像
Docker打包镜像 前置工作 1.虚拟机中配置好docker环境,并导入nginx,mysql,jdk的镜像 2.下载docker for windows 用idea打包镜像和创建容器需要这个东西支持 下载安装包后执行,无脑回车即可 3.idea中配置docker连接 完成配置后&…...
RabbitMQ 基础架构流程 数据隔离 创建用户
介绍 publisher:消息发送者-exchange:交换机,复制路由的消息-queue:队列,存储消息consumer:消息的消费者 工作流程 publisher消息发送者 -> exchange 交换机 -> queue 队列 -> consumer 消息的消…...
win10系统下openssl证书生成和单向认证
文章目录 前言一、安装openssl二、创建证书目录和必要文件1、创建sslcertTest文件夹2、创建openssl.cnf文件3、创建必要文件 三、创建密钥和证书1、创建根证书私钥ca.key2、创建根证书请求文件ca.csr3、创建自签根证书ca.crt4、创建服务端私钥server.key5、创建服务端证书请求文…...
动态规划的解题思想
1. 从斐波那契数列说起 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始, ,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0, F(2) 1 F(n) F&…...
OpenCV结构分析与形状描述符(10)检测并提取轮廓函数findContours()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在二值图像中查找轮廓。 该函数使用算法 253从二值图像中检索轮廓。轮廓是有用的工具,可用于形状分析和对象检测与识别。参见 OpenC…...
HBase 源码阅读(二)
衔接 在上一篇文章中,HMasterCommandLine类中在startMaster();方法中 // 这里除了启动HMaster之外,还启动一个HRegionServerLocalHBaseCluster cluster new LocalHBaseCluster(conf, mastersCount, regionServersCount,LocalHMaster.class, HRegionSer…...
深度学习每周学习总结N9:transformer复现
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 多头注意力机制前馈传播位置编码编码层解码层Transformer模型构建使用示例 本文为TR3学习打卡,为了保证记录顺序我这里写…...
数据结构与算法(3)栈和队列
1.前言 哈喽大家好啊,今天博主继续为大家带来数据结构与算法的学习笔记,今天是关于栈和队列,未来博主会将上一章《顺序表与链表》以及本章《栈与队列》做专门的习题应用专题讲解,都会很有内容含量 ,欢迎大家多多支持&…...
11、Django Admin启用对计算字段的过滤
重新定义admin.py中的Hero管理模型如下: admin.register(Hero) class HeroAdmin(admin.ModelAdmin):list_display ("name", "is_immortal", "category", "origin", "is_very_benevolent")list_filter ("…...
xxl-job升级到springboot3.0 导致页面打不开报错)问题
原因:springboot3.0 因为移除了jsp 导致xxl-job不能访问,解决方法如下 1、修改PermissionInterceptor拦截器 package com.xxl.job.admin.controller.interceptor;import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.…...
栈和队列.
目录 1. 栈(Stack) 2. 栈的模拟实现 3. 栈的应用场景 4. 队列(Queue) 5. 队列的模拟实现 6. 循环队列 7. 双端队列(Deque) 8. 面试题 1. 栈(Stack) 栈:一种特殊…...
Parallel.ForEach - 并行处理
Parallel.ForEach 是 C# 中 System.Threading.Tasks.Parallel 类提供的一个方法,用于并行地迭代集合中的每一个元素。Parallel.ForEach 方法允许多个线程同时处理集合中的元素,从而提高程序的执行效率,特别是在处理大量数据或执行耗时任务时。…...
【MySQL】初识MySQL—MySQL是啥,以及如何简单操作???
前言: 🌟🌟本期讲解关于MySQL的简单使用和注意事项,希望能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/wwaqe 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 目…...
LLM应用实战: 产业治理多标签分类
数据介绍 标签体系 产业治理方面的标签体系共计200个,每个标签共有4个层级,且第3、4层级有标签含义的概括信息。 原始数据 企业官网介绍数据,包括基本介绍、主要产品等 企业专利数据,包括专利名称和专利摘要信息,且专…...
下载Mongodb 4.2.25 版本教程
1、MongoDB 安装包的下载链接 Download MongoDB Community Server | MongoDB 进入如下截图: 2、查找历史版本 往下拉,点击“...”,找到”Archived releases”,点击进入 、 3、下载Mongodb 4.2.25 版本 找到如下图4.2.25版本下载链接,点击就可…...
罗技PUBG鼠标宏压枪技术全解析:从核心挑战到落地实践
罗技PUBG鼠标宏压枪技术全解析:从核心挑战到落地实践 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在PUBG等战术射击游戏中&#x…...
锁相双极性PWM电机驱动原理与STM32实现
1. 项目概述Motor_LockedAntiphase是一个面向嵌入式电机控制的轻量级驱动库,专为实现锁相双极性PWM(Locked Antiphase PWM)控制模式而设计。该模式广泛应用于直流有刷电机(DC Brushed Motor)的双向调速与精确力矩控制场…...
Debian 12 内网求生记:手把手搞定1Panel离线安装与Docker启动(附iptables补丁)
Debian 12 内网求生记:手把手搞定1Panel离线安装与Docker启动(附iptables补丁) 1. 内网环境下的技术挑战 在完全隔离的内网环境中部署现代化运维工具,就像在没有GPS的荒野中寻找方向。我们面对的不仅是网络连接的缺失,…...
网站建设时如何考虑 SEO 因素_如何做好 SEO 竞争对手分析
网站建设时如何考虑 SEO 因素 在现代数字化商业环境中,网站建设不仅仅是一个静态的存在,而是一个动态、竞争激烈的市场。为了在这个竞争中脱颖而出,考虑 SEO 因素是至关重要的。SEO(搜索引擎优化)不仅能够提升网站的可…...
Windows 11上运行Android应用的3大核心优势:WSA完全指南
Windows 11上运行Android应用的3大核心优势:WSA完全指南 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 想在Windows电脑上直接使用你最喜欢的An…...
ozz-animation多格式导入工具链详解:FBX、glTF、Collada全支持
ozz-animation多格式导入工具链详解:FBX、glTF、Collada全支持 【免费下载链接】ozz-animation Open source c skeletal animation library and toolset 项目地址: https://gitcode.com/gh_mirrors/oz/ozz-animation ozz-animation是一款开源C骨骼动画库和工…...
OpenClaw多任务队列管理:千问3.5-27B并行处理技巧
OpenClaw多任务队列管理:千问3.5-27B并行处理技巧 1. 为什么需要任务队列管理 上个月我尝试用OpenClaw自动处理200多份PDF文档的摘要生成任务,结果遭遇了典型的"暴力调度"问题——所有任务同时发起请求,导致千问3.5-27B模型实例直…...
手柄映射的艺术:RetroArch输入系统深度解析与实战指南
手柄映射的艺术:RetroArch输入系统深度解析与实战指南 【免费下载链接】RetroArch Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3. 项目地址: https://gitcode.com/GitHub_Trending/re/RetroArch 问题发现:当手柄…...
【从零开始学Java | 第二十九篇】数组工具类Arrays和集合工具类Collections
目录 前言 一、数组工具类Arrays 1.数组的打印 2.数组的排序和查找 3.数组的复制和扩容 4.数组转换集合 二、集合工具类Collections 1.排序和位置操作 2.查找和极值运算 前言 本次学习两个Java提供的工具类,第一个是用来操作数组的工具类——Arrays&#x…...
2025最权威的五大AI科研网站解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 毕业论文写作领域里人工智能技术的应用,带来了好多积极影响,明显提高…...
