密码学基本概念

news2024/11/26 1:29:17

密码学简介

密码是经过加密过后的口令,是指用特定的变换对数据信息进行加密保护或者安全身份认证的物质和技术,密码学是对安全通信技术的研究,要能够有效的防范潜在攻击,也就是对信息加密解密的过程。

密码基本性质

在这里插入图片描述

密码学的发展

古典密码到近代密码再到我们现在现在使用的公钥密码,密码学经历了四个阶段,每个阶段都以新技术的出现做为分界点。
在这里插入图片描述

加密与解密

在这里插入图片描述
加密:由明文转换为密文的过程。
解密:由密文恢复出明文的过程。
在这里插入图片描述

这里以古典密码为例:受算法保密性限制,如著名的凯撒密码就是古典密码一种,通过密码的位移进行加密,但是一旦公开算法,这种密码很容易被人破解。

凯撒密码:加密admin
from random import randint

import string
#凯撒加密
#加密
def kaisa(s, k):  # 定义函数 接受一个字符串s 和 一个偏移量k
    lower = string.ascii_lowercase  # 小写字母
    upper = string.ascii_uppercase  # 大写字母
    before = string.ascii_letters  # 无偏移的字母顺序 小写+大写
    after = lower[k:] + lower[:k] + upper[k:] + upper[:k]  # 偏移后的字母顺序 还是小写+大写
    # 分别把小写字母和大写字母偏移后再加到一起
    table = ''.maketrans(before, after)  # 创建映射表
    return s.translate(table)  # 对s进行偏移 即加密

s = input('请输入一个字符串:')

k = randint(0,26) #从0-25中挑选随机一个数字当做偏移量
print(kaisa(s, k))

在这里插入图片描述
解密脚本

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 - key
                if num<0:
                    num = num + len(LETTERS1)
                str = str + LETTERS1[num]  #将解密后字符追加到字符串末尾
            elif i.islower():  #密文字母为小写
                num = LETTERS2.find(i)  #在字母里搜索到密文字符的位置
                num = num - key
                if num<0:
                    num = num + len(LETTERS2)
                str = str + LETTERS2[num]  #将解密后字符追加到字符串末尾
        else:
            str = str + i  #如果密文中内容不在字母里则不解密,直接追加
    print('第%d把钥匙的结果是%s' %(key, str))  #显示每一个可能的值

这里通过穷举的方式得到明文admin

在这里插入图片描述

对称密码算法

对称密码算法(也称单钥或私钥密码算法):加密密钥和解密密钥相或实质上等同,即从一个易于推出另一个。

特点:

  • DES、3DES、IDEA、AES
  • 密钥相对较短,一般采用128,192或256比特大小
  • 传输时采用安全信道传输密钥
    优点:
  • 效率高,算法简单,系统开销小
  • 适合加密大量数据
  • 明文长度与密文长度相等
    缺点:
  • 需要以安全方式进行密钥交换
  • 密钥管理复杂
  • 无法解决消息的篡改、否认等问题

在这里插入图片描述

非对称密码算法

非对称密码算法:加密密钥和解密密钥不同,从一个很难推出另一个。其中,对外公开的密钥,称为公开密钥(public key),简称公钥;必须保密的密钥,称为私有密钥( private key) ,简称私钥。又叫公钥密码算法( Public-keycipher)。
特点

  • RSA、ECC、ElGamal
  • 公钥加密 私钥解密
  • 私钥加密 公钥解密
  • 密钥长度512-2048位

优点:

  • 密钥分发数目与参与者数目相同
  • 在有大量参与者的情况下易于密钥管理
  • 安全
  • 支持数字签名和不可否认性
  • 无需事先与对方建立关系,交换密钥
    缺点:
  • 速度相对较慢
  • 可能比同等强度的对称密码算法慢10倍到100倍
  • 加密后,密文变长

在这里插入图片描述

混合加密

混合加密结合对称和非对称算法的特点进行组合而成,先是接收方将生成的公钥共享给发送方一份,发送方使用此公钥将生成的会话秘钥进行加密,同时发送方使用会话秘钥对明文内容进行加密,完成加密后,将两份加密过的内容一起发送给接收方,接收方接收到消息,先通过配对的私钥解密出会话秘钥,然后使用会话秘钥对密文进行解密,得到明文内容。

加密传输过程:

在这里插入图片描述

解密过程:

在这里插入图片描述

哈希函数

  • 对称密码和非对称密码算法主要解决信息的机密性问题,而实际系统和网络还可能受到消息篡改等攻击。
  • 篡改攻击主要包括:修改信息内容,改变程序使其不能正确·运行等。哈希函数可以用来保证信息的完整性。
  • 哈希(Hash)函数(也称为杂凑函数或单向散列函数)接受一个消息作为输入,产生一个称为哈希值的输出。输出的哈希值也可称为散列值、消息摘要(MessageDigest, MD)

实验

哈希函数比较常用与下载的文件校验,通过文件算出哈希值进行比对文件是否被篡改。
创建一个index.html文件计算哈希值,对比修改后的哈希值,是否有变化。
在这里插入图片描述
在这里插入图片描述
修改前
在这里插入图片描述
在这里插入图片描述
修改后发现有明显改变
在这里插入图片描述

MD5

MD: Message Digest
消息摘要

  • 输入:任意长度的消息
  • 输出: 128位消息摘要
  • 处理:以512位输入数据块为单位

SHA-1

SHA ( Secure Hash Algorithm ,安全哈希算法)由美国国家标准技术研究所开发,1993年作为联邦信息处理标准发布,2008 年又有更新。

  • 输入:最大长度为264位的消息;
  • 输出:160位消息摘要;
  • 处理:输入以512位数据块为单位处理.

比较

  • 散列值长度:MD5 128bits SHA1 160bits
  • 安全性:SHA1算法被视为MD5的替代候选算法
  • 速度:SHA1慢些 (openssl speed md5/sha1)

数字签名

除了保护信息的机密性和完整性,密码学技术也可以解决信息的可鉴别性(真实性或认证性)和不可否认性。
注意:数字签名是对文件的哈希值进行签名而不是对文件本身。
传统签名的基本特点:

  • 能与被签的文件在物理上不可分割
  • 签名者不能否认自己的签名
  • 签名不能被伪造
  • 容易被验证
    数字签名是传统签名的数字化,基本要求:
  • 能与所签文件“绑定”
  • 签名者不能否认自己的签名
  • 签名不能被伪造
  • 容易被验证

数字签名应用

  • (1)可信性:签名让文件的接收者相信签名者是慎重地在文件上签名的。
  • (2)不可重用性:签名不可重用,即使同一消息在不同时刻的签名也是有区别的。如果将签名部分提取出来,附加在别的消息后面,验证签名会失败。这是因为签名和所签名消息之间是一一对应的,消息不同签名内容也不同,因此签名无法重复使用。
  • (3)数据完整性:在文件签名后,文件不能改变。
  • (4)不可伪造性:签名能够证明是签名者而不是其他人在文件上签名,任何人都不能伪造签名。
  • (5)不可否认性:在签名者否认自己的签名时,签名接收者可以请求可信第二方进行仲裁。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS3 选择器 :nth-child 与 :nth-of-type 区别

一、:nth-child 1.1 说明 :nth-child(n) 选择器匹配属于其父元素的第 N 个子元素&#xff0c;不论元素的类型。n 可以是数字、关键词或公式。 注意&#xff1a;如果第 N 个子元素与选择的元素类型不同则样式无效&#xff01; 1.2 示例 <style> div>p:nth-child(2…

1行Python代码识别身份证信息,还能自动告警,YYDS

大家好&#xff0c;这里是程序员晚枫。 录入身份证信息是一件繁琐的工作&#xff0c;如果可以自动识别并且录入系统&#xff0c;那可真是太好了。 今天我们就来学习一下&#xff0c;如何自动识别身份证信息并且录入系统~ 识别身份证信息 识别身份证信息的代码最简单&#x…

【金融量化】CTA策略之VeighNa量化实战笔记(1)

量化投资实战笔记 1 基本概念 1、一手股票&#xff1a;100支股票 2、收盘比开盘上涨的百分比&#xff1a;&#xff08;收盘-开盘&#xff09;/开盘 3、开盘比前日收盘的百分比&#xff1a;&#xff08;开盘-前日收盘&#xff09;/前日收盘 4、从dataframe中取每个月的第一天 …

Hgame-week 1(部分)

标题MISCSing InWhere am I神秘的海报e99p1ant_want_girlfriendWEDClassic Childhood Game改源码直接看jsBecome A MemberUser-Agent:Cookie:Referer:X-Forwarded-For:json请求方式登陆Guess Who I AmCRYPTO神秘的电话注意大小写REVERSEtest your IDAMISC Sing In aGdhbWV7V2…

【GPLT 二阶题目集】L2-027 名人堂与代金券

对于在中国大学MOOC&#xff08;http://www.icourse163.org/ &#xff09;学习“数据结构”课程的学生&#xff0c;想要获得一张合格证书&#xff0c;总评成绩必须达到 60 分及以上&#xff0c;并且有另加福利&#xff1a;总评分在 [G, 100] 区间内者&#xff0c;可以得到 50 元…

二十、Gtk4-GtkMenuButton, accelerators, font, pango and gsettings

本节将重新构造Tfe文本编辑器。 在工具栏上放置了打开、保存和关闭按钮。此外&#xff0c;GtkMenuButton被添加到工具栏中。当点击这个按钮时会显示一个弹出式菜单。在这里&#xff0c;弹出式的含义很广泛&#xff0c;包括下拉式菜单。新建、另存为、偏好和退出项目被放入菜单…

Java IO流之序列化流

序列化流/对象操作输出流 可以把Java中的对象写到本地文件中 序列化流的小细节 使用对象输出流将对象保存到文件时会出现NotSerializableException\color{#FF0000}{NotSerializableException}NotSerializableException 异常 解决方案&#xff1a;需要让JavaBean类实现Serializa…

【树】二叉树递归遍历和创建

二叉树的遍历二叉树的遍历是将二叉树的每个结点访问且访问一次遍历按根来说常用三种设访问根结点记作V&#xff0c;遍历根的左子树记作L&#xff0c;遍历根的右子树记作R&#xff1b;有&#xff1a;先序遍历VLR&#xff0c;中序遍历LVR&#xff0c;后序遍历LRV。这个遍历是递归…

设计模式 - 六大设计原则之ISP(接口隔离原则)

文章目录概述CaseBad ImplBetter Impl概述 接口隔离原则&#xff08;Interface Segregation Principle, ISP&#xff09;,要求尽量将臃肿庞大的接口拆分成更小的和更具体的接口&#xff0c;让接口中只包含相关的方法。 接口隔离是为了高内聚、低耦合。 在实际的开发中&#x…

Altova MobileTogether 8.1

Altova MobileTogether 8.1 使用RecordsManager进行无代码开发的主要更新 可视化配置复杂条件的主要脚本扩展。 分层用户组。 客户端之间的UI兼容性模式 当开发人员希望应用程序在所有平台上看起来都一样&#xff0c;而不是使用每个平台的原生外观时&#xff0c;现在可以使用新…

蓝桥杯刷题016——最大子矩阵(尺取法+单调队列)

题目来源&#xff1a;最大子矩阵 - 蓝桥云课 (lanqiao.cn) 问题描述 小明有一个大小为 NM 的矩阵, 可以理解为一个 N 行 M 列的二维数组。 我们定义一个矩阵 m 的稳定度 f(m) 为f(m)max(m)−min(m), 其中 max(m) 表示矩阵 m 中的最大值, min(m) 表示矩阵 m 中的最小值。 现在小…

朴素贝叶斯分类

一、朴素贝叶斯法原理 1.基本原理 朴素贝叶斯法(Naive Bayes)是一种基础分类算法&#xff0c;它的核心是贝叶斯定理条件独立性假设。贝叶斯定理描述的是两个条件概率之间的关系&#xff0c;对两个事件A和B&#xff0c;由乘法法则易知(A∩B)P(A)P(B│A)P(B)P(A│B)(A∩B)P(A)P(…

离散数学与组合数学-06特殊的图

文章目录离散数学与组合数学-06特殊的图6.1 欧拉图6.1.1 哥尼斯堡七桥问题6.1.2 欧拉图的定义6.1.3 无向欧拉图的判定6.1.4 有向欧拉图的判定6.1.5 一笔画问题6.1.6 求回路6.2 哈密顿图6.2.1 周游世界问题6.2.2 哈密顿图的定义6.2.3 哈密顿图的必要条件6.2.4 哈密顿图的充分条件…

Hadoop基础之《(5)—MapReduce概述》

一、什么是MapReduce MapReduce将计算过程分为两个阶段&#xff1a;Map和Reduce。 1、Map阶段并行处理输入数据。 2、Reduce阶段对map结果进行汇总。 二、结构图 三、HDFS、Yarn、MapReduce三者之间的调用关系 HDFS三台服务器&#xff0c;第一台上有DataNode和NameNode。第二…

如何像程序员一样思考

如何像程序员一样思考 全世界越来越多的人发现了软件开发的乐趣和兴奋。一个你构建东西的职业&#xff0c;去打破它们&#xff0c;然后再把它们构建得更好。您可以经常设定自己的工作时间并与来自全球各地的客户一起工作的职业。一个可以自己当老板的职业&#xff1f;编程在 2…

android12.0(S) Launcher3 导入 AndroidStudio 调试编译

验证环境 aosp 12.0 源码&#xff0c;分支 android-12.0.0_r3 可以参考之前写的 android12.0(S) Pixel 3XL (QCOM 845) 编译刷机 AndroidStudio 版本 Android Studio Arctic Fox | 2020.3.1 Patch 4 gradle 版本 gradle-7.0.2-bin.zip gradle:7.0.4 二手 Pixel 3 XL一台可直…

[WUSTCTF2020]颜值成绩查询(布尔注入)

目录 信息收集 脚本 reference 信息收集 输入1出现固定的回显&#xff0c;输入2-4出现乱码 Hi admin, your score is: 100 输入其他特殊字符无回显&#xff0c;也无报错回显 采用布尔注入进行判断 布尔注入原理 代码存在SQL注入漏洞&#xff0c;然而页面即不会回显数据&am…

【C++算法图解专栏】一篇文章带你掌握尺取法(双指针)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为 0 基础刚入门数据结构与算法的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们一起交流~ &#x1f4da;专栏地址&#xff1a;https://blog.csdn.net/Newin…

java spring IOC xml方式工厂Bean操作

spring中有两种Bean 第一种 普通 Bean 就是我们在配置文件中 定义的类对象 创建bean 并定义相关的id和声明类对象 普通bean的特点在于 在配置文件中定义的类型 也就是返回类型 就比如 你定义的是一个 book类的类型 那你这个bean返回的 也比如是个book类型的对象 第二种 是在工…

模拟实现vector/迭代器失效问题

对于STL&#xff0c;我们不仅学会使用STL,还要了解其底层原理&#xff0c;这样一来&#xff0c;我们就能知道什么时候用string好&#xff0c;什么时候用vector&#xff0c;什么时候用list&#xff0c;哪种方法效率高等等。其次了解了STL的底层原理&#xff0c;也助于我们的C功力…