密码算法概论
基本概念
什么是密码学?
简单来说,密码学就是研究编制密码和破译密码的技术科学
例题:
密码学的三个阶段
- 古代到1949年:具有艺术性的科学
- 1949到1975年:IBM制定了加密标准DES
- 1976至今:1976年开创了公钥密码学,1978年公布了RSA密码体制,1991年发布了邮件加密软件PGP,2000年AES取代DES
密码学的分类
- 古典密码算法:替代加密、置换加密
- 对称加密算法:DES、AES
- 非对称加密算法:RSA、背包算法、Rabin、椭圆曲线等
目前在数据通讯中使用最普遍的是DES和RSA等
什么是密码系统?
密码系统又叫做密码体制,用数学符号表示为
S={M,C,K,E,D}
- M表示:明文空间,即需要隐藏的信息
- C表示:密文空间,即明文加密后的信息
- K表示:密钥或密钥空间,通常指加解密算法的关键信息,可分为加密密钥和解密密钥
- E表示:加密算法
- D表示:解密算法
密码体制的基本类型
- 错乱
- 代替
- 密本
- 加乱
破译或攻击密码的方法
穷举攻击法,统计分析法,数学分析法
什么是隐写术?
隐写术就是将秘密的消息通过一种无伤大雅的消息发送出去。隐写术分为两种,语言隐写术,技术隐写术
什么是符号码?
什么是公开代码?
对称密码
对称加密算法所需解决的问题:密钥的安全传递问题
如果加密和解密过程都使用相同的密钥或密钥算法,那么这种加密技术可以被归类为对称加密。
古典密码
古典密码是密码学中的其中一个类型,其大部分加密方式都是利用替换式密码或移项式密码,有时则是两者的混合。
其中替换密码可以概括为单表替换密码、多表替换密码和多字符替换密码
单表替换密码
什么是单表替换密码?
单表替换密码就是使用一个密文字母表,并且用密文字母表中的一个字母来代换明文字母表中的一个字母
破解单表置换密码算法
使用穷举法:次数26!= 4e26
使用统计法:
凯撒密码
凯撒密码(英语:Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。
应用
凯撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。凯撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,凯撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
凯撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,…,Z=25。此时偏移量为n的加密方法即为:
阿特巴西密码
阿特巴希密码将字母表整个扭转:第一个字母(aleph)与最后一个(taw)相替换,第二个(beth)与倒数第二个(shin)相替换,如此类推。密码学上的示沙克之谜出现在《耶利米书》中,ששך-示沙克(25:26;51:41)其实是加密后的בבל-巴别(即巴比伦)。[1][2]
现代希伯来文配合阿特巴希密码:
明文: אבגדהוזחטיכלמנסעפצקרשת
密文: תשרקצפעסנמלכיטחזוהדגבא
而罗马字母使用阿特巴希密码则是:
明文: ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文: ZYXWVUTSRQPONMLKJIHGFEDCBA
多表替换密码
维吉尼亚密码
什么是多表替换加密?
在一个多表替换密码中,会使用多个字母作为密码。为了加快加密或解密速度,所有的字母通常写在一张表格上,密码学上称作tableau。这种表格通常是26×26,因为这样才能放下全部26个英文字母。填充表格及选择下次使用的字母的方法,就是不同多字母替换密码之间的定义。多字母替换密码比单字母更难打破,因为其替换可能性多,密文要较长才可。
用来加密和解密的维吉尼亚表格
维吉尼亚密码中,表格的第一行只需直接填上26个字母,然后以下每一行的字母都是向左偏移一格。(这叫作表格横移,数学上每一列同余26。)要用这种密码需要使用一个关键字来作为密钥。关键字每次用完就再次重复。假设关键字是“CAT”,明文的第一个字由“C”加密,第二个字由“A”加密,第三个则由“T”加密,然后再回到C加密,一直重复。然后按照右边的密码表加密,例如BALL用CAT作关键字时会加密至DAEN,可见即使是同一个“L”亦会加密至另一个字母。现实中,维吉尼亚密码的关键字非常长。
例如,假设明文为:
ATTACKATDAWN
选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:
LEMONLEMONLE
对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到:
明文:ATTACKATDAWN
密钥:LEMONLEMONLE
密文:LXFOPVEFRNHR
置换密码
分组密码
在密码学中,分组加密(英语:Block cipher),又称分块加密或块密码,是一种对称密钥算法。它将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。分组加密是极其重要的加密协议组成,其中典型的如AES和3DES作为美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转帐,非常广泛。
什么是好的分组密码?
- 分组长度足够大
- 密钥量足够大
- 密码变换足够复杂
- 加密和解密运算简单
什么是扩散?
扩散是指要将算法设计成明文每一比特的变化尽可能多地影响到输出密文序列的变化,以便隐蔽明文的统计特性
什么是混乱?
指在加解密变换过程中明文、密钥以及密文之间的关系尽可能地复杂化,以防密码破译者采用解析法(即通过建立并求解一些方程)进行破译攻击。
DES算法
什么是DES,DES(英语:Data Encryption Standard,缩写为 DES)其实是美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。
https://juejin.cn/post/7213743217337499709
AES算法
AES加密算法在维基百科上也叫做高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法(荷兰语发音:[ˈrɛindaːl],音似英文的“Rhine doll”),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
序列密码(流密码)
序列密码的主要原理是通过伪随机序列发生器产生性能优良的随机序列(或滚动密钥生成器),使用该序列与明文序列叠加(或加密)来输出密文序列。
序列密码和分组密码的不同之处是什么?
- 加密方式:序列密码一次处理一个或几个比特,分组密码一次处理固定大小的数据块,通常是64比特或128比特
- 运算方式:序列密码通常以流模式(Stream Mode)运行,即它们生成一个连续的密钥流,然后将该密钥流与明文进行逐比特异或运算以产生密文。分组密码通常使用分组模式(Block Mode),其中输入数据被划分为固定大小的块,并且每个块在加密之前都是相互独立的。
非对称密码(公钥密码)
为什么使用公钥密码体系(也称为非对称密码体系)?
- 密钥管理:公钥密码体系允许通信双方使用不同的密钥(公钥和私钥)。发送方使用接收方的公钥进行加密,接收方使用自己的私钥进行解密。这种方式避免了传统的对称密码体系中需要在通信双方之间共享密钥的问题,简化了密钥管理。
- 数字签名:公钥密码体系还支持数字签名,发送方可以使用自己的私钥对消息进行签名,接收方可以使用发送方的公钥来验证签名的真实性。这种机制可以确保消息的完整性和认证性,防止信息被篡改或伪造。
- 安全性:在公钥密码体系中,私钥通常保存在安全的环境中,只有其拥有者可以访问。因此,即使公钥泄露,也不会危及通信的安全性。而在对称密码体系中,一旦密钥泄露,通信的安全性将受到严重威胁。
- 密钥交换:公钥密码体系可以用于安全地进行密钥交换。通信双方可以使用对方的公钥加密一个临时的对称密钥,然后使用这个对称密钥进行后续的通信。这种方式称为密钥交换协议,例如Diffie-Hellman密钥交换。
非对称密码机制下的密钥协商
Diffie-Hellman密钥交换:
Diffie-Hellman密钥交换机制中的中间人攻击
RSA算法
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。[1]
公钥和私钥的产生
(N,e)是公钥,(N,d)是私钥,Alice将她的公钥(N,e)传给Bob,将她的私钥(N,d)藏起来。
加解密消息以及证明,详见:RSA加解密算法
杂凑函数和消息认证码
密码散列算法
密码散列算法也称为单向散列函数、杂凑函数、哈希算法、HASH算法或消息摘要算法。它通过一个单向数学函数,将任意长度的一块数据转换为一个定长不可逆转的数据,这段数据通常叫做消息摘要。典型的散列函数有:MD5 (Message-Digest Algorithm 5) ,SHA-1等。
摘要算法的特性
- 不可逆
- 对任何长度的信息进行哈希后,结果都是一个固定长度的数据摘要,摘要的长度通常为128 bits或160 bits
- 原始信息中一个字节的改变会导致摘要后的结果发生变化
什么是好的散列函数?
好的散列函数应该具备以下几个特点:
- 均匀性:散列函数应该尽可能地均匀地将输入空间映射到输出空间,即不同的输入应该尽可能地分布在输出空间的各个位置上。这样可以降低碰撞(两个不同的输入映射到同一个输出)的概率,提高散列算法的性能和安全性。
- 无法逆向推导:好的散列函数应该是单向的,即很难从散列值反推出原始输入。这样可以保护原始数据的机密性,防止被逆向破解。
- 抗碰撞性:好的散列函数应该具有较低的碰撞概率,即不同的输入在经过散列函数计算后产生相同的输出的可能性应该尽可能地小。这样可以提高数据的完整性和可靠性。
- 高效性:散列函数的计算速度应该尽可能地快,尤其是在处理大量数据时。高效的散列函数可以降低系统的计算开销,提高系统的性能。
- 抗碰撞性:好的散列函数应该对输入数据的细微变化具有很高的敏感性,即如果输入数据发生了微小的改变,其散列值应该发生显著的变化。这样可以保证散列函数在应用于数据完整性校验等场景时的有效性。
数字签名
数字签名(Digital Signature)又称公钥数字签名或电子签章,是以电子形式存储于信息中或以附件或逻辑上与之有联系的数据,用于辨识数据签署人的身份,并表明签署人对数据中所包信息的认可。在网络环境中,数字签名完全可以代替现实中的“亲笔签字”。数字签名是公钥加密技术与数字摘要技术的应用。
数字签名的作用
- 保证传输信息的完整性
- 发送者的身份认证
- 防止交易过程抵赖行为的发生
数字签名的基本原理
发送者用自己的私有密钥加密数据后传给接收者,接收者用发送者的公钥解开数据后,就可确定消息来自于谁,同时也是对发送者发送的信息的真实性的一个证明,发送者对所发信息不能抵赖。
密码学新方向
相关文章:
密码算法概论
基本概念 什么是密码学? 简单来说,密码学就是研究编制密码和破译密码的技术科学 例题: 密码学的三个阶段 古代到1949年:具有艺术性的科学1949到1975年:IBM制定了加密标准DES1976至今:1976年开创了公钥密…...
实时数仓之实时数仓架构(Hudi)
目前比较流行的实时数仓架构有两类,其中一类是以FlinkDoris为核心的实时数仓架构方案;另一类是以湖仓一体架构为核心的实时数仓架构方案。本文针对FlinkHudi湖仓一体架构进行介绍,这套架构的特点是可以基于一套数据完全实现Lambda架构。实时数…...
2022-04-15_for循环等_作业
for循环 编写程序数一下 1到 100 的所有整数中出现多少个数字9计算1/1-1/21/3-1/41/5 …… 1/99 - 1/100 的值,打印出结果求10 个整数中最大值在屏幕上输出9*9乘法口诀表二分查找 编写程序数一下 1到 100 的所有整数中出现多少个数字9 #include <stdio.h>in…...
脑机辅助推导算法
目录 一,背景 二,华容道中道 1,问题 2,告诉脑机如何编码一个正方形格子 3,让脑机汇总信息 4,观察图,得到启发式算法 5,根据启发式算法求出具体解 6,可视化 一&am…...
【原创教程】三菱FX PLC控制FR-E740变频器
变频器的使用 1. 使用三菱FX PLC 控制变频器时,接线图请按下图所示接线。 各个端子的说明如下: R、S、T:变频器电源,E740变频器电源位3相380V。 STF:正转启动, STF信号ON时为正转、OFF时为停止指令。 STR :反转启动,STR信号ON时为反转、OFF时为停止指令。 RH、RM、RL…...
重读Java设计模式: 深入探讨建造者模式,构建复杂对象的优雅解决方案
引言 在软件开发中,有时需要构建具有复杂结构的对象,如果直接使用构造函数或者 setter 方法逐个设置对象的属性,会导致代码变得冗长、难以维护,并且容易出错。为了解决这个问题,我们可以使用建造者模式。 一、建造者…...
C语言数据结构易错知识点(6)(快速排序、归并排序、计数排序)
快速排序属于交换排序,交换排序还有冒泡排序,这个太简单了,这里就不再讲解。 归并排序和快速排序都是采用分治法实现的排序,理解它们对分支思想的感悟会更深。 计数排序属于非比较排序,在数据集中的情况下可以考虑使…...
使用 React Router v6.22 进行导航
使用 React Router v6.22 进行导航 React Router v6.22 是 React 应用程序中最常用的路由库之一,提供了强大的导航功能。本文将介绍如何在 React 应用程序中使用 React Router v6.22 进行导航。 安装 React Router 首先,我们需要安装 React Router v6…...
单链表的插入和删除
一、插入操作 按位序插入(带头结点): ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。 typedef struct LNode{ElemType data;struct LNode *next; }LNode,*LinkList;//在第i 个位置插插入元素e (带头结点) bool Li…...
全量知识系统 之“程序”详细设计 之 “絮”---开端“元素周期表”表示的一个“打地鼠”游戏
全量知识系统 之“程序”详细设计 概述-概要和纪要 序 絮(一个极简的开场白--“全量知识系统”自我介绍) 将整个“人生”的三个阶段 比作“幼稚园”三班 : 第一步【想】-- “感性”思维游戏:打地鼠 。学前教育-新生期&#x…...
【详细讲解WebView的使用与后退键处理】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
【Linux多线程】生产者消费者模型
【Linux多线程】生产者消费者模型 目录 【Linux多线程】生产者消费者模型生产者消费者模型为何要使用生产者消费者模型生产者消费者的三种关系生产者消费者模型优点基于BlockingQueue的生产者消费者模型C queue模拟阻塞队列的生产消费模型 伪唤醒情况(多生产多消费的…...
Django屏蔽Server响应头信息
一、背景 最近我们被安全部门的漏洞扫描工具扫出了一个服务端口的漏洞。这个服务本身是一个Django启动的web服务,并且除了登录页面,其它页面或者接口都需要进行登录授权才能进行访问。 漏洞扫描信息和提示修复信息如下: 自然这些漏洞如何修复,…...
前端对数据进行分组和计数处理
js对数组数据的处理,添加属性,合并表格数据。 let data[{id:1,group_id:111},{id:2,group_id:111},{id:3,group_id:111},{id:4,group_id:222},{id:5,group_id:222} ]let tempDatadata; tempDatatempData.reduce((arr,item)>{let findarr.find(i>i…...
synchronized 和 lock
synchronized 和 Lock 都是 Java 中用于实现线程同步的机制,它们都可以保证线程安全。 # synchronized 介绍与使用 synchronized 可用来修饰普通方法、静态方法和代码块,当一个线程访问一个被 synchronized 修饰的方法或者代码块时,会自动获…...
ssh 公私钥(github)
一、生成ssh公私钥 生成自定义名称的SSH公钥和私钥对,需要使用ssh-keygen命令,这是大多数Linux和Unix系统自带的标准工具。下面,简单展示如何使用ssh-keygen命令来生成具有自定义名称的SSH密钥对。 步骤 1: 打开终端 首先,打开我…...
LangChain入门:8.打造自动生成广告文案的应用程序
在这篇技术博文中,我们将探讨如何利用LangChain框架的模板管理、变量提取和检查、模型切换以及输出解析等优势,打造一个自动生成广告文案的应用程序。 LangChain框架的优势 在介绍应用程序之前,让我们先了解一下LangChain框架的几个优势: 模板管理: 在大型项目中,文案可…...
AI如何影响装饰器模式与组合模式的选择与应用
🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章:设计模式深度解析:AI如何影响…...
【C语言环境】Sublime中运行C语言时MinGW环境的安装
要知道,GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的,如果我们想在 Windows 平台使用 GCC 编译器,可以安装 GCC 的移植版本。 目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种,分别为 MinGW 和 Cygwin…...
Ubuntu18.04 下Ublox F9P 实现RTK (利用CORS服务无需自建基站)
本内容参考如下连接:Ubuntu下Ublox F9P利用CORS服务无需自建基站实现RTK-CSDN博客 一、Ublox F9P 硬件模块示意图 图中展示了Ublox F9P的接口,包括串口2(`UART1`和`UART2`),USB1。需要人为通过u-center(Ublox F9P的显示软件)软件设置以下功能: Ublox通过`UART1`向PC端发送…...
springboot+vue在idea上面的使用小结
1.在mac上面删除java的jdk方法: sudo rm -rfjdk的路径 sudo rm -rf /Users/like/Library/Java/JavaVirtualMachines/corretto-17.0.10/Contents/Home 2.查询 Mac的jdk版本和路径: /usr/libexec/java_home -V 3.mac上面查询和关闭idea的网页端口&…...
MyEclipse将项目的开发环境与服务器的JDK 版本保持一致
前言 我们使用MyEclipse开发Java项目开发中,偶尔会遇到因项目开发环境不协调,导致这样那样的问题,在这里以把所有环境调整为JDK1.6 为例。 操作步骤 1.Window-->Preferences-->Java-->Installed JRES 修改为 1.6版本 2.Window-->…...
为BUG编程:函数重载的烦恼 char *匹配bool而不是string
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 这是一个BUG。 运行环境为linu…...
C++第十四弹---模板初阶
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、泛型编程 2、函数模板 2.1、函数模板的概念 2.2、函数模板的格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.5、模板参数的匹配原则 …...
C++--内联函数
当调用一个函数时,程序就会跳转到该函数,函数执行完毕后,程序又返回到原来调用该函数的位置的下一句。 函数的调用也需要花时间,C中对于功能简单、规模小、使用频繁的函数,可以将其设置为内联函数。 内联函数ÿ…...
java数组与集合框架(一) -- 数据结构,数组
数据结构 概述 为什么要讲数据结构? 任何一个有志于从事IT领域的人员来说,数据结构(Data Structure)是一门和计算机硬件与软件都密切相关的学科,它的研究重点是在计算机的程序设计领域中探讨如何在计算机中组织和存储…...
React 应用实现监控可观测性最佳实践
前言 React 是一个用于构建用户界面的 JavaScript 框架。它采用了虚拟 DOM 和 JSX,提供了一种声明式的、组件化的编程模型,以便更高效地构建用户界面。无论是简单还是复杂的界面,React 都可以胜任。 YApi 是使用 React 编写的高效、易用、功…...
批处理(Batch)把Excel文件xls格式和xlsx格式进行互换
批处理(Batch)把Excel文件xls格式改成xlsx格式以及xlsx格式改为xls格式。 Case1:xls转xlsx - 单个文件.bat $Excel New-Object -ComObject Excel.Application $Excel.Visible $false $Workbook $Excel.Workbooks.Open("C:\Test\Excel\1.xls&qu…...
Adobe ColdFusion 任意文件读取漏洞复现(CVE-2024-20767)
0x01 产品简介 Adobe ColdFusion是美国奥多比(Adobe)公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言,将可扩展、改变游戏规则且可靠的产品的愿景变为现实。 0x02 漏洞概述 由于 Adobe ColdFusion 的访问控制不当,未经身份认证的远程攻击者可以构造恶…...
搜索与图论——Floyd算法求最短路
floyd算法用来求多源汇最短路 用邻接矩阵来存所有的边 时间复杂度O(n^3) #include<iostream> #include<cstring> #include<algorithm>using namespace std;const int N 20010,INF 1e9;int n,m,k; int g[N][N];void floyd(){for(int k 1;k < n;k ){f…...
自己做网站都需要什么/cps广告是什么意思
[转载]风声水起的blog题目:已知strcpy函数的原型是:char * strcpy(char * strDest,const char * strSrc);1.不调用库函数,实现strcpy函数。2.解释为什么要返回char *。解说:1.strcpy的实现代码char * strcpy(char * strDest,const…...
ps做网站广告logo/深圳网络整合营销公司
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。 Igor 将源代码以类 BSD 许可证的形式发布…...
网站修改影响做百度竞价吗/网站seo设置是什么
写在前面:楼主毕业后所在的公司属于互联网电商成长型公司,不用融资,系集团内部自主创业,由于待遇还有福利什么的在本市还行,最主要是有一帮年轻人在工作,自己发展的机会也是很多的,然后就入坑了,…...
湖南网站制作公司/软文网站大全
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m n)来保存 nums2 中…...
网站怎么做mip技术/发外链的平台有哪些
//最近一直在做一个数论专题,后期有待整理,先将有关资料收藏下,在学习高斯消元的时候看了czyuan大牛的此文获益匪浅,czyuan的此份模板可以解决大多高斯问题,当然并不是万能的,其中建立矩阵是难点࿰…...
广州做营销网站公司/拉新app推广接单平台
一, 密码最少长度为 6位 ,并至少包含3种复杂类别的字符 (如 Abc134 或者 abc12# 符合 如abc123 123 <>( 就不符合) 二 密码最少长度为 8位 ,并至少包含2种复杂类别的字符 (如 Abc21334 或者 abcd123…...