浅谈对称加密非对称加密

  • 对称加密:加密和解密使用的密钥是同一个
    常见算法:DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES
  • 非对称加密:需要两个密钥,一个公开密钥、一个私有密钥
    常见算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

使用过程:
用户A生成非对称加密密钥并将公钥进行公开,用户B接收公钥使用公钥加密信息发送给用户A,加密的信息只有用户A使用私钥进行解密。

  • 反之则是用户B进行生成一对公私密钥

在非对称加密中,用户A生成的一对密钥包括公钥和私钥。如果用户A想要给用户B发送加密信息,应该使用用户B的公钥来加密信息。这是因为非对称加密的特性决定了公钥用于加密,私钥用于解密。

具体步骤如下:

  1. 用户B向用户A发送其公钥。
  2. 用户A使用用户B的公钥对消息进行加密。
  3. 加密后的消息可以安全地发送给用户B。
  4. 用户B使用自己的私钥来解密用户A发送过来的加密消息。

这样,通过使用用户B的公钥,用户A可以确保只有用户B能够解密消息,因为只有用户B拥有与公钥对应的私钥。这种方式保障了加密通信的安全性和可靠性。

数据加密标准AES

使用相同的密钥进行加密和解密的对称加密
支持三种密钥长度:128位、192位和256位。较长的密钥长度提供更高的安全性,但也需要更多的计算资源
然后,对需要加密的数据进行填充(Padding)以确保数据块长度符合AES要求(通常为128位)

注:AES加密是对数据块进行加密,而不是单个数字

假设我们有以下明文数据和密钥:
明文数据:12345678
密钥:0123456789ABCDEF1. 选择加密模式:选择一种合适的加密模式,如ECB、CBC等。这里我们选择ECB模式。2. 填充方案:将明文数据填充到AES块大小(128位或16字节)的倍数。在这个例子中,明文数据"12345678"长度为8字节,不足一个块大小。我们可以选择使用PKCS#7填充方案,在末尾填充8- 8 = 0x08,得到填充后的数据为"1234567808080808"。3. 加密:使用AES算法和密钥对填充后的数据进行加密。在这个例子中,我们使用AES-128算法(使用128位的密钥)。将填充后的数据"1234567808080808"和密钥"0123456789ABCDEF"输入AES加密算法,得到密文数据。4. 密文:26da32782e5199b78c0f7f046f292ab9python:
from Crypto.Cipher import AESdef encrypt(plaintext, key):cipher = AES.new(key, AES.MODE_ECB)ciphertext = cipher.encrypt(plaintext)return ciphertext.hex()  # 返回十六进制表示的密文plaintext = b'1234567808080808'
key = b'0123456789ABCDEF'
ciphertext = encrypt(plaintext, key)
print(ciphertext)

在这里插入图片描述

数据加密标准DES

DES算法采用分组密码技术,将明文分成64位的块,并通过一系列的置换、替换和轮函数操作来加密数据,在DES加密的过程中,消息会经历多轮的加密操作,每轮都会使用不同的子密钥来对数据进行处理

假设要对一个8字节(64位)的消息进行DES加密,比如 "12345678"
首先,需要一个64位的密钥,假设选择的密钥是:"ABCDEFGH"
经过DES加密算法处理后,得到的密文可能是一串十六进制数字:"A2B4F8C9D3E56701"DES加密算法至少需要执行16轮加密操作,每一轮都使用不同的子密钥对数据进行处理。每一轮中,明文会经历一系列的置换、替换和混合操作
由于DES算法的密钥长度较短(56位),因此现在DES已经被认为不够安全一般都使用AES

数据加密标准RSA

简单说就是公钥加密私钥解密的过程

  • 密钥对生成:
    首先,选择两个大素数p和q,并计算它们的乘积n = p * q。
    接下来,计算欧拉函数φ(n) = (p-1) * (q-1),它表示小于n且与n互质的正整数的数量。
    然后,选择一个整数e,满足1 < e < φ(n),且e与φ(n)互质。这个e将成为公钥的一部分。
    最后,计算一个整数d,满足e * d ≡ 1 (mod φ(n)),即(e * d与φ(n)取模的结果为1)。这个d将作为私钥的一部分。
  • 加密过程:
    发送者使用接收者的公钥(n,e)来加密消息m。具体地,发送者计算密文c = m^e mod n,其中^表示乘方运算。
    发送者将密文c发送给接收者。
  • 解密过程:
    接收者使用自己的私钥(d)来解密收到的密文c。具体地,接收者计算明文m = c^d mod n。
    接收者从解密的明文中提取原始消息。

实际中可能更多的会进行一个填充方案和哈希函数

  • 举例:
选择两个不同的大素数p和q:
p = 61, q = 53计算n = p * q:
n = 61 * 53 = 3233计算欧拉函数φ(n) = (p-1)(q-1):
φ(3233) = 60 * 52 = 3120选择一个与φ(n)互质的整数e:
选择e=17计算e的模反元素d (即d * e ≡ 1 (mod φ(n))):
d = 2753公钥为(n, e),私钥为(n, d)。
假设要加密明文"M=123",加密过程如下:- 加密:C = m^e mod nC = 123^17 mod 3233 = 855- 解密:m = c^d mod nm=855^2753 mod 3233 = 123
实际中还需要考虑填充方案、数字签名等

填充方案

填充方案通常用于对称加密算法中,因为对称加密算法要求输入的数据长度是固定的,而实际的数据往往不会正好满足这个长度。填充方案用于将数据填充到合适的长度。

  • 常见的填充方案包括:
    PKCS#5和PKCS#7填充:通过在数据末尾填充特定字节来使数据长度符合加密算法的要求。
    Zero padding:在数据末尾补零,使得数据长度符合要求。

将待加密的数据使用选定的填充方案填充至合适的长度。
例如,对于PKCS#7填充,如果需要填充4个字节,那么填充的字节就是0x04 0x04 0x04 0x04。

哈希函数

将任意长度的输入数据映射到固定长度输出的函数。在加密中,哈希函数常用于验证数据的完整性、数字签名(常用非对称加密中)、密码存储等

  • 常见的哈希函数包括:
    SHA-1、SHA-256、SHA-512:安全哈希算法,产生不同长度的哈希值。
    MD5:虽然已经不建议用于安全目的,但仍然在某些场景中被使用。

将数据输入到哈希函数中,得到固定长度的哈希值。
例如,对于SHA-256哈希函数,输入数据后会得到一个256位(32字节)的哈希值。

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

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

相关文章

归并排序算法(经典、常见)

今天我们不刷力扣了&#xff0c;我们来复习&#xff08;手撕&#xff09;一下数据结构中的八大排序算法之一&#xff0c;归并排序 基本概念&#xff1a; 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&am…

【网络技术】【Kali Linux】Wireshark嗅探(十五)SSDP(简单服务发现协议)报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客&#xff1a; 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;一&#xff09;ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;二&#xff09;TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

与MySQL DDL 对比分析OceanBase DDL的实现

本文将简要介绍OceanBase的DDL实现方式&#xff0c;并通过与MySQL DDL实现的对比&#xff0c;帮助大家更加容易理解。 MySQL DDL 的算法 MySQL 的DDL实现算法主要有 copy、inplace和instant。 copy copy算法的实现相对简单&#xff0c;MySQL首先会创建一个临时表&#xff0…

C++:STL

STL 文章目录 STLSTL 绪论迭代器&#xff08;iterators&#xff09;容器&#xff08;Containers&#xff09;vectorset,multisetmap,multimapstackqueuedequepriority_queuebitset 算法&#xff08;Algorithms&#xff09;sort,count,find,lower_bound,upper_bound,binary_sear…

(2024,attention,可并行计算的 RNN,并行前缀扫描)将注意力当作 RNN

Attention as an RNN 公众号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方法 3.1 注意力作为一种&#xff08;多对一的&#xff09;RNN 3.2 注意力作为&#xff08;多对多&…

多语言印度红绿灯系统源码带三级分销代理功能

前端为2套UI&#xff0c;一套是html写的&#xff0c;一套是编译后的前端 后台功能很完善&#xff0c;带预设、首充返佣、三级分销机制、代理功能。 东西很简单&#xff0c;首页就是红绿灯的下注页面&#xff0c;玩法虽然单一&#xff0c;好在不残缺可以正常跑。

Putty: 随心御剑——远程启动服务工具plink

一、引言:如何远程控制 也许你会有这样的场景,交互程序(以下简称UI程序)跑在windows端,而控制程序跑在Linux上。我们想要通过windows端 UI程序来启动Linux下面的服务,来一场酣畅淋漓的御剑飞行咋办,难道要自己十年磨一剑,在Linux下编写一个受控服务程序么.计算机科技发…

【MATLAB】信号的熵

近似熵、样本熵、模糊熵、排列熵|、功率谱熵、奇异谱熵、能量熵、包络熵 代码内容&#xff1a; 获取代码请关注MATLAB科研小白的个人公众号&#xff08;即文章下方二维码&#xff09;&#xff0c;并回复信号的熵本公众号致力于解决找代码难&#xff0c;写代码怵。各位有什么急需…

FreeRTOS中断中释放信号量

串口接收&#xff1a;中断程序中逆序打印字符串 串口接收&#xff1a;逆序回环实验思路 注&#xff1a;任务优先级较高会自动的切换上下文进行运行 FreeRTOS中的顶半操作和底半操作 顶半操作和底半操作“这种叫法源自与Linux”在嵌入式开发中&#xff0c;为了和Linux操作系统做…

Linux网络编程: 网络基础

Linux网络编程: 网络基础 1.网络划分 一.网络通信1.网络通信和本地通信的联系2.网络通信与本地通信最本质的区别及其衍生出的问题 二.网络协议初识1.为何本地通信不行&#xff1f;2.打电话的例子体会分层模型的好处3.OSI七层模型的提出4.OSI七层模型与TCP/IP五层模型1.TCP/IP与…

二十九篇:构建未来:信息系统的核心框架与应用

构建未来&#xff1a;信息系统的核心框架与应用 1. 引言 在这个充满挑战和机遇的信息时代&#xff0c;信息系统已经成为现代组织不可或缺的神经中枢。它们不仅革新了我们处理信息的方式&#xff0c;更是极大地增强了决策制定的效率和质量。在这篇文章中&#xff0c;我将分享我…

Java进阶-SpringCloud使用BeanUtil工具类简化对象之间的属性复制和操作

在Java编程中&#xff0c;BeanUtil工具类是一种强大且便捷的工具&#xff0c;用于简化对象之间的属性复制和操作。本文将介绍BeanUtil的基本功能&#xff0c;通过详细的代码示例展示其应用&#xff0c;并与其他类似工具进行对比。本文还将探讨BeanUtil在实际开发中的优势和使用…

5.26牛客循环结构

1002. 难点&#xff1a; 两层循环条件设置 思路 可以设置三个变量 代码 1003 思路&#xff1a; 与星号双塔差不多&#xff0c;在此基础上加大一点难度 每日练题5.23 &#xff08;EOF用法&#xff09;-CSDN博客 代码 1004 代码

Android Compose 八:常用组件 Switch

Switch 切换按钮 val isChecked remember { mutableStateOf(true) }Switch(checked isChecked.value,onCheckedChange {Log.i("text_compose","onCheckedChange>>"it)isChecked.value it})效果 默认颜色 应该对应 主题色 1.1 thumbContent 按钮…

Python Beautiful Soup 使用详解

大家好&#xff0c;在网络爬虫和数据抓取的领域中&#xff0c;Beautiful Soup 是一个备受推崇的 Python 库&#xff0c;它提供了强大而灵活的工具&#xff0c;帮助开发者轻松地解析 HTML 和 XML 文档&#xff0c;并从中提取所需的数据。本文将深入探讨 Beautiful Soup 的使用方…

vue项目打包教程

如果是用 vue-cli 创建的项目&#xff0c;则项目目录中没有 config 文件夹&#xff0c;所以我们需要自建一个配置文件&#xff1b;在vue项目目录下创建文件 vue.config.js&#xff0c;需注意文件名称必须是 vue.config.js&#xff0c;然后在文件中插入以下代码&#xff1a; 文件…

我让gpt4o给我推荐了一千多次书 得到了这些数据

事情是这样的&#xff0c;我们公司不是有个读书小组嘛&#xff0c;但是今年大家都忙于工作&#xff0c;忽视了读书这件事&#xff0c;所以我就想着搞个群机器人&#xff0c;让它明天定时向群里推荐一本书&#xff0c;用来唤起大家对读书的兴趣。但在调试的过程中就发现gpt4o老喜…

齿轮常见故障学习笔记

大家好&#xff0c;这期咱们聊一聊齿轮常见的失效形式&#xff0c;查阅了相关的资料&#xff0c;做个笔记分享给大家&#xff0c;共同学习。 介绍 齿轮故障可能以多种方式发生。如果在设计阶段本身就尽量防止这些故障的产生&#xff0c;则可以产生改更为优化的齿轮设计。齿轮…

pytest框架用例命名规则详解

pytest 测试用例的命名规则是为了确保 pytest 能够正确地识别和执行测试用例。 以下是关于 pytest 测试用例命名规则的详细解释&#xff1a; 1 单个测试文件以‘test_’开头或者以‘_test’结尾 比如我们创建test_case1.py case2_test.py文件。 2 单个测试文件中&#xff0c…

58. UE5 RPG AI行为树的装饰器

书接56. UE5 RPG 给敌人添加AI实现跟随玩家&#xff0c;我们实现了AI一些基础设置&#xff0c;并实现了获取敌人附近的玩家实现了跟随功能 接下来&#xff0c;我们将实现区分职业&#xff0c;并根据职业不同设置不同的攻击距离&#xff0c;并且根据职业实现不同的技能施放。 …