CRYPTO 密码学-笔记

一、古典密码学

1.替换法:用固定的信息,将原文替换成密文

        替换法的加密方式:一种是单表替换,另一种是多表替换

        单表替换:原文和密文使用同一张表

        abcde---》sfdgh

        多表替换:有多涨表,原文和密文进行对比

        表单1:abcde---》sfdgh  表单2:abcde---》chfhk   表单3:abcde---》jftou

       原文:adc

        密钥:312

        密文:jgf 

2.位移法:对照字母在字母表上的位置,进行移动

        凯撒加密:

               abce---》向后位移量为2---》cefg

加密:

str=input("请输入明文:")
n=int(input("请输入密钥:"))
str_encrypt=""
for letter in str:if letter==" ":  #遇到空格选择不加密letter_encrypt=" "else:letter_encrypt=chr((ord(letter)-ord("a") +n) %26 +ord("a"))str_encrypt += letter_encrypt
print("密文为:",str_encrypt)

解密:

str=input("请输入密文:")
n=int(input("请输入密钥:"))
str_decrypt=""
for word in str:if word==" ":  #遇到空格选择不解密word_decrypt=" "else:word_decrypt=chr((ord(word)-ord("A") -n) %26 +ord("A"))str_decrypt = str_decrypt+word_decrypt
print("明文为:",str_decrypt)

 暴力破解凯撒:

LETTERS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
LETTERS1="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LETTERS2="abcdefghijklmnopqrstuvwxyz"text=input("请输入密文:")
for key in range(len(LETTERS)):str=""for i in text:if i in LETTERS:if i.isupper():  #密文字母为大写num = LETTERS1.find(i)  #在字母里搜索到密文字符的位置num = num - keyif num<0:num = num + len(LETTERS1)str = str + LETTERS1[num]  #将解密后字符追加到字符串末尾elif i.islower():  #密文字母为小写num = LETTERS2.find(i)  #在字母里搜索到密文字符的位置num = num - keyif num<0:num = num + len(LETTERS2)str = str + LETTERS2[num]  #将解密后字符追加到字符串末尾else:str = str + i  #如果密文中内容不在字母里则不解密,直接追加print('第%d把钥匙的结果是%s' %(key, str))  #显示每一个可能的值

3.凯撒密码的破解方法:

        频率分析法:在不确定密钥的情况下,根据明文中出现频率最高的单词和密文中出现频率最高的单词进行比较,来获得密钥

统计密文中字符出现频率:

def count_each_char_sort_value(str):dict = {}for i in str:dict[i] = dict.get(i, 0) + 1# sorted 方法会生成一个排序好的容器# operator.itemgetter(1)  获取字典第一维的数据进行排序# reverse 表示倒序排列dict=sorted(dict.items(),key= operator.itemgetter(1),reverse=True)return dictif __name__ == "__main__":res = count_each_char_sort_value("abdefdcsdf")print(res)

英文中单词e出现的频率最高,出现最高的字符的ASCII码与e的ASCII的差值就是key

通过频率分析法得到的密钥,是对大篇幅的密文进行的,密文越长解密的明文越准确

 4.栅栏密码

栅栏密码将原始字符串分成N个一组,然后把每组的第一个字连接起来,形成一段无规律的话

以2栏栅栏加密为例:

原始明文:Do you know People fall in love with sunsets when they are sad.

去空格并分组:Do yo uk no wP eo pl ef al li nl  ov ew it hs un se ts wh en th ey ar es ad .(单独一组)

第一组:Dyunwepealnoeihustweteaea.

第二组:ookoPolflilvwtsneshnhyrsd

密文:Dyunwepealnoeihustweteaea.ookoPolflilvwtsneshnhyrsd

5.ROT5/13/18/47

ROT5/13/18/47编码是具有可逆性的,可以自我解密,主要用于快速浏览或者机器读取

ROT13是rotate by 13 places的简写,意思是旋转13个位置。rot13是凯撒密码的一个特例,即k=13.

ROT5/13/18/47加密和解密算法完全相同。

ROT5:只对数字进行加密,用当前数字往前数的第5个数字替换当前数字

ROT18:这是个异类,本来没有,它是rot5和rot13的组合,为了更好的称呼,命名为rot18

ROT47:对数字、字母、常用符号加密,按ASCII值进行位置替换(可显示的ascii共有94个),将字符ascii往前数的第47位就是对应的替换字符

例题:synt{ebg13_vf_sha}

总结:

凯撒加密:结果只有英文字母,因为是按字母表位置替换的

rot13:结果也只有英文字母被替换

rot5:只有数字被替换

rot47:字符也被替换

二、近代密码学

对称加密:

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
示例
        我们现在有一个原文3要发送给B
        设置密钥为108, 3 * 108 = 324, 将324作为密文发送给B
        B拿到密文324后, 使用324/108 = 3 得到原文
常见加密算法

  • DES : Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
  • AES : Advanced Encryption Standard, 高级加密标准 .在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

特点

  • 加密速度快, 可以加密大文件
  • 密文可逆, 一旦密钥文件泄漏, 就会导致数据暴露
  • 加密后编码表找不到对应字符, 出现乱码
  • 一般结合Base64使用,解决乱码的问题

 1.DES加密

使用的密钥key(密钥长64位),需要是8字节

明文按64位进行分组

2.AES加密

是DES的高级版

使用的密钥key(密钥长128位),需要是16字节

DES加密和AES加密都属于对称加密

3.base64

在DES加密和AES加密的过程中,加密的编码会出现负数,在ascii码表中找不到对应的字符,就会出现乱码。为了解决乱码的问题,一般结合base64使用

所谓Base64,即是说在编码过程中使用了64种字符:大写A到Z、小写a到z、数字0到9、“+”和“/”

Base58是Bitcoin(比特币)中使用的一种编码方式,主要用于产生Bitcoin的钱包地址 相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"i",以及"+"和"/"符号

Base64特点:

  • Base64是网络上最常见的用于传输8bit字节码的可读性编码算法之一
  • 可读性编码算法不是为了保护数据的安全性,而是为了可读性
  • 可读性编码不改变信息内容,只改变信息内容的表现形式

Base64算法原理:

  1. 将原始数据每三个字节作为一组,每个字节是8个bit,所以一共是 24 个 bit
  2. 将 24 个 bit 分为四组,每组 6 个 bit
  3. 在每组前面加补 00,将其补全成四组8个bit
  4. 根据Base64码表得到扩展后每个字节的对应符号

base64算法原理,特别的理解

抽象的理解就是,对原始字符串削皮,削成两层,得到最内层的东西,再平均分成4组,最后再把削的两层皮贴回去,变成原来的模样

1.在整个原始字符串中每次拿出一组进行编译,一组三个字节

2.第一次削去英文字母的形式,露出ascii码形式

3.第二次削去ascii码的形式,露出二进制形式

4.再将这一组所有的二进制,平均分4小组,即每组6位

 5.最后针对每小组的6位编码,逆着原来的步骤,一步一步把皮贴回去,

就是将二进制形式变成十进制形式,再将十进制对照base64表,变成英文字母的形式

 上面的表格中是对Man进行编码,Man正好是3组8位的字符串

对于M,首先ascii编码是77,再将77转换成二进制形式,之后以6个字节为一组,分成4组

每组形成的编码对照base64对照表,写出编码后的字符串

有时我们会在Base64字符末尾会看到=,有时1个,有时2个

通过上面的我们知道了Base64编码过程是3个字符一组的进行,如果原文长度不是3的倍数怎么办呢? 例如我们的原文为Ma,它不够3个,那么只能在编码后的字符串中补=了。缺一个字符补一个,缺两个补两个即可,所以有时候你会看见base64字符串结尾有1个或者2个=

可以根据这些特点,判断一串编码是由base64编码的

  • 编码的字符只含有A到Z、小写a到z、数字0到9、“+”和“/“
  • 结尾有一个或两个“=”的

三、现代密码学:

1.消息摘要

简介

  • 对一份数据,进行一个单向的 Hash 函数,生成一个固定长度的 Hash 值,这个值就是这份数据的摘要,也称为指纹。
  • 消息摘要算法的主要特点是加密过程不需要私钥,并且加密的数据不可逆。只有输入是相同的明文数据并且采用相同的消息摘要算法,得出来的密文才是一样的。其加密过程的计算量是比较大的
  • 消息摘要算法目前主要应用在"数字签名"领域,作为对明文的摘要算法,著名的摘要算法有 RSA 公司的 MD5 算法和 SHA-1 算法及其大量的变体。

特点

  • 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的

         MD5 算法摘要的消息有 128bit,用 SHA-1 算法摘要的消息最终有 160bit 的输出,SHA-1 的变体可以产生 192bit 和 256bit 的消息摘要

  • 只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出
  • 消息摘要是单向、不可逆的

应用

可以用于校验数据的完整性。(之所以叫做指纹的原因)

例如我们在下载文件时,数据源会提供一个文件的MD5。文件下载好之后,我们本地计算出文件的MD5,和数据源提供的MD5做对比,如果相同则文件是完整的。但独立使用消息摘要时,无法确保数据没有被篡改,因为无法保证从数据源获取的MD5有没有被中途篡改。

MD算法

MD 算法: Message Digest Algorithm ,目前主流的是 MD5 算法,为第五版算法,之前有 MD2、MD3、MD4 算法。

MD5生成的消息摘要是128位

SHA算法

安全散列算法(英语:Secure Hash Algorithm,缩写为 SHA)是一个密码散列函数家族,是 FIPS 所认证的安全散列算法。能计算出一个数字消息所对应到的长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

SHA 家族的五个算法,分别是 SHA-1、SHA-224、SHA-256、SHA-384,和 SHA-512,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。后四者有时并称为 SHA-2。

2.非对称加密

① 非对称加密算法又称现代加密算法、公钥密码体制。

② 非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。

③ 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey)

④ 公开密钥和私有密钥是一对

⑤ 如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。

⑥ 如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。

⑦ 因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

示例


首先生成密钥对, 公钥为(5,14), 私钥为(11,14)
现在A希望将原文2发送给B
A使用公钥加密数据, 2的5次方mod 14 = 4 , 将密文4发送给B
B使用私钥解密数据, 4的11次方mod14 = 2, 得到原文2


特点


加密和解密使用不同的密钥
如果使用私钥加密, 只能使用公钥解密
如果使用公钥加密, 只能使用私钥解密
处理数据的速度较慢, 因为安全级别高


常见算法

RSA
ECC
 

在公钥加密系统中,加密和解密是相对独立的,加密和解密会使用到两把不一样的钥匙。

加密密钥(公钥)向公众公开,解密密钥(私钥)只对解密人自己知道,非法使用者无法根据公钥推算出私钥,顾其可称为公钥密码体制

在CTF中,RSA密码是最常见的公钥密码体制

3.数字签名

摘要经过加密,就得到数字签名

数字签名是公钥加密系统与消息摘要的技术结合应用

数字签名必须保证以下三点:

  • 报文鉴别——接收者能够核实发送者对报文的签名;
  • 报文的完整性——接收者不能伪造对报文的签名或更改报文内容。
  • 不可否认——发送者事后不能抵赖对报文的签名;

image-20200203210110403image-20200203210110403数字签名过程:

 4.数字证书

上面的一切都很完美,你用公钥能够解密,说明确实是私钥方发送的,你很放心……

但有没有想过,万一这把公钥本身,就被人做了手脚???

为了保证“公钥”是可信的,数字证书应运而生。

作用:

确保数据接受者的公钥是没有被篡改过的

数字证书通常包含一下内容:

  1. 证书所有人的公钥
  2. 证书发行者对证书的数字签名
  3. 证书所用的签名算法
  4. 证书发布机构、有效期、所有者的信息等其他信息

 CA证书

数字证书里有个重要概念,CA,发送方先把自己的公钥给CA,CA对其进行加密得到加密后的发送方公钥(用的是CA的私钥和CA加密算法),也就是CA的数字证书。

注意这里有两个不同的非对称算法(对应2个公钥私钥对),一个算法是发送方加密摘要的,用于生成数字签名;另一个算法是CA加密发送方公钥的,用于生成数字证书。两个算法相互独立,没有必然联系。

发送时不仅发送内容、数字签名,还包含发送方的数字证书。接收方拿到后,首先从数字证书中解密出发送方公钥(用的是CA的公钥和CA解密算法),这个公钥必然是可信的。然后就是和前面一样的流程,拿发送方公钥去解密数字证书,得到摘要;最后比对摘要是否一致。

一个问题:既然数字证书是为了保证发送方公钥不是别人伪造的,那怎么保证“CA”的公钥不是伪造的呢?

答:CA是第三方机构,CA公钥是公开的,接收方可以跟别人比对(比如在网上查询),因此不可能伪造。但是发送方公钥,接收方是通过通信得到的,收到后无法验证。

引用【区别】摘要、数字签名、数字证书 - 知乎 (zhihu.com)

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

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

相关文章

云服务器 宝塔(每次更新)

su root 输入密码 使用 root 权限 /etc/init.d/bt default 获取宝塔登录 位置和账号密码。进入宝塔 删除数据库 删除php前端站点 删除PM2后端项目 前端更改完配置打包dist文件 后端更改完配置项目打包 数据库结构导出 导入数据库 配置 PM2 后端 安装依赖

剪枝基础与实战(2): L1和L2正则化及BatchNormalization讲解

1. CIFAR10 数据集 CIFAR10 是深度学习入门最先接触到的数据集之一,主要用于图像分类任务中,该数据集总共有10个类别。 图片数量:6w 张图片宽高:32x32图片类别:10Trainset: 5w 张,5 个训练块Testset: 1w 张,1 个测试块Pytorch 集成了很多常见数据集的API, 可以通过py…

idea的断点调试

1、行断点 首先在代码的最左侧点击会显示红色的圆圈 第二步在main方法中右键选中debug run进行运行 会出现下面图片的情况 出现上图之后&#xff0c;点击console 下一步 这个时候就可以看到调试的结果了 6、方法调用栈&#xff1a;这里显示了该线程调试所经过的所有方法&…

VBA_MF系列技术资料1-167

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

测试先行:探索测试驱动开发的深层价值

引言 在软件开发的世界中,如何确保代码的质量和可维护性始终是一个核心议题。测试驱动开发(TDD)为此提供了一个答案。与传统的开发方法相比,TDD鼓励开发者从用户的角度出发,先定义期望的结果,再进行实际的开发。这种方法不仅可以确保代码满足预期的需求,还可以在整个开…

IT运维:使用数据分析平台监控DELL服务器

概述 在企业日常运维中&#xff0c;我们有着大量的服务器设备&#xff0c;设备故障一般可以通过常用的监控软件实现自动告警&#xff0c;但如果在管理运维中我们要做的不仅仅是发现故障&#xff0c;处理硬件故障&#xff0c;我们还需要进一步的了解&#xff0c;今年一共出现了多…

基于开源模型搭建实时人脸识别系统(四):人脸质量

续人脸识别实战之基于开源模型搭建实时人脸识别系统&#xff08;三&#xff09;&#xff1a;人脸关键点、对齐模型概览与模型选型_CodingInCV的博客-CSDN博客 不论对于静态的人脸识别还是动态的人脸识别&#xff0c;我们都会面临一个问题&#xff0c;就是输入的人脸图像的质量可…

某网站DES加密逆向分析实战

文章目录 一、抓包分析二、加密分析一、重写加密 一、抓包分析 分析站点&#xff1a; aHR0cDovL2VpcC5jaGFuZmluZS5jb20v 首先我们提交一下登陆信息&#xff1a; 搜索j_password查看加密函数: 把上图搜索到的encryptPassword函数拿出来分析一下&#xff1a; function encryptP…

vue 简单实验 v-bind 变量与html属性绑定

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"bind-attribute"><span v-bind:title"message">鼠标悬停几秒钟查看此处动态绑定的提示信息&#xff01;</sp…

企业ADManager Plus软件的使用案例

引言&#xff1a; 在当今数字化时代&#xff0c;企业的活动主要依赖于信息技术和计算机系统。作为关键的IT基础架构组件之一&#xff0c;Active Directory&#xff08;AD&#xff09;在维护和管理用户、计算机和资源方面发挥着关键作用。AD的高效管理对于确保企业的平稳运行至…

亿赛通电子文档安全管理系统 RCE漏洞

亿赛通电子文档安全管理系统 RCE漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC检测: 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失…

Android studio之GridView使用

目录 效果图&#xff1a;![在这里插入图片描述](https://img-blog.csdnimg.cn/86e4a48a71164dec82613d58b1fbaa1c.jpeg)代码&#xff1a; 效果图&#xff1a; 代码&#xff1a; UserGridviewAdapter package com.example.gridviewpro.Adapter;import android.content.Contex…

Wireshark数据抓包分析之ARP协议

一、实验目的&#xff1a; 通过wireshark的数据抓包了解这个ARP协议的具体内容 二、预备知识: 1.Address Resolution Protocol协议&#xff0c;就是通过目标IP的值&#xff0c;获取到目标的mac地址的一个协议 2.ARP协议的详细工作过程&#xff0c;下面描述得非常清晰&#xff…

07-微信小程序-注册页面-模块化

07-微信小程序-注册页面 文章目录 注册页面使用 Page 构造器注册页面参数Object初始数据案例代码 生命周期回调函数组件事件处理函数setData()案例代码 生命周期模块化 注册页面 对于小程序中的每个页面&#xff0c;都需要在页面对应的 js 文件中进行注册&#xff0c;指定页面…

云渲染小课堂 | 3dmax渲染小技巧,让你作品更出色!

3dmax是一款专业的三维建模、动画和渲染软件&#xff0c;广泛应用于影视、游戏、建筑、广告等领域。云渲染是一种利用云计算技术&#xff0c;将渲染任务分配到海量的服务器上进行并行计算的服务&#xff0c;可以大大提高渲染效率和质量&#xff0c;节省时间和成本。使用3dmax和…

Cesium 添加与原生按钮样式相同的按钮

Cesium 添加与原生按钮样式相同的按钮 原生的按钮自定义一个&#xff0c;仿生按钮 原生的按钮 自定义一个&#xff0c;仿生按钮 html <div id"cesiumContainer"><button class"btn" ref"newBtn" click"buttonClick()">&l…

论文解读 | ScanNet:室内场景的丰富注释3D重建

原创 | 文 BFT机器人 大型的、有标记的数据集的可用性是为了利用做有监督的深度学习方法的一个关键要求。但是在RGB-D场景理解的背景下&#xff0c;可用的数据非常少,通常是当前的数据集覆盖了一小范围的场景视图&#xff0c;并且具有有限的语义注释。 为了解决这个问题&#…

字节一面:post为什么会发送两次请求?

前言 最近博主在字节面试中遇到这样一个面试题&#xff0c;这个问题也是前端面试的高频问题&#xff0c;因为在前端开发的日常开发中我们总是会与post请求打交道&#xff0c;一个小小的post请求也是牵扯到很多知识点的&#xff0c;博主在这给大家细细道来。 &#x1f680; 作者…

vue3 基础知识 ( webpack 基础知识)05

你好 文章目录 一、组件二、如何支持SFC三、webpack 打包工具四、webpack 依赖图五、webpack 代码分包 一、组件 使用组件中我们可以获得非常多的特性&#xff1a; 代码的高亮&#xff1b;ES6、CommonJS的模块化能力&#xff1b;组件作用域的CSS&#xff1b;可以使用预处理器来…

KiCad 已经打开 交错保存 错误

期望结果&#xff1a; 打开工程 .pro 文件后&#xff0c;双击工程文件列表中的的 原理图&#xff1a;*.kicad_sch 能够打开原理图。 实际结果&#xff1a; 打开工程 .pro 文件后&#xff0c;双击工程文件列表中的的 原理图&#xff0c;弹出错误提示框如下&#xff1a; 重现步…