DES,RAS,HASH

news/2024/10/22 7:59:52/

 是猫咪,我加入了一些猫咪

1.DES

Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion)。DES加密算法原理简析_51CTO博客_DES加密算法原理DES(使用密钥加密的块算法)_百度百科 (baidu.com)

实现过程:

数据:8个字节64位,用于加密或者解密

密钥:8个字节共64位(实际上工作密钥57位,其余8位是校验位或者随便)

加密和解密的函数是一个,只是密钥次序相反

明文

DES算法本身适用于任何二进制数据,因此可以用于加密数字、英文字母或任何其他类型的二进制数据。在实际应用中,通常使用 ASCII 编码来表示英文字母和数字,因此 DES 加密的明文可以视为由 ASCII 码组成的字符串。

需要注意的是,DES 算法中所使用的二进制数据块长度都是 64 位,因此在进行加密操作时需要将所有输入数据转化为 64 位的二进制数据。

代码

本来要自己写c结果越写越晕,用python摆烂。  

from pyDes import *# 加密函数
def des_encrypt(text, key):iv = b'\0\0\0\0\0\0\0\0'k = des(key[:8], ECB, iv, pad=None, padmode=PAD_PKCS5)d = k.encrypt(text)return d.hex()# 测试
if __name__ == '__main__':key = b'07654321'text = b'hello world'encrypted = des_encrypt(text, key)print(encrypted)

 3DES: 

3DES加密算法原理_3des加密原理_张维鹏的博客-CSDN博客

 2.RSA

非对称密码

原理

 公钥密码学

 公钥密码学(Public Key Cryptography),也叫做非对称加密,是一种基于数学难题的加密方法。与传统的对称加密算法不同,公钥密码学使用了两个密钥:公钥和私钥。其中公钥可以公开,私钥必须保密。

公钥密码学的发展是整个密码学发展历史中最伟大的一次革命。

公钥密码学的原理基于数学问题的复杂性,例如大质数分解、离散对数等。通过这些数学问题的特殊性质,可以构造一种算法,使得对于任意一个字符串,都存在一对密钥,可以使用公钥进行加密,私钥进行解密。因为这些数学问题的复杂度非常高,所以即使拥有公钥,也很难通过数学手段还原出私钥,从而保证了数据的安全性。

比如,在RSA加密算法中,公钥和私钥按一定规则生成,需要保证私钥不能由公钥推导出来。加密时使用公钥对数据进行加密,解密时使用私钥对加密后的数据进行解密。由于公钥已经公开,任何人都可以获得公钥进行加密,但只有私钥的持有者才能解密,保证了通信过程中的数据机密性。
公钥密码学广泛应用于网络安全、数字签名、电子商务等领域,是保护信息安全的重要技术手段之一。

图文彻底搞懂非对称加密(公钥密钥) - 知乎 (zhihu.com)

RSA

RSA 是现在使用最为广泛的非对称加密算法 

 RSA算法_百度百科 (baidu.com)

RSA —— 经典的非对称加密算法 - 知乎 (zhihu.com)

明文M,密文C:0到n-1之间的整数,分组为单位加密

加密过程:C=M^e mod(n),M=C^d mod(n)=(M^e)^d mod(n).

其中 n双方已知,发送方知道e,接收方知道d

公钥:PU={e,n}

私钥:PR={d,n}

实现代码 

import random
from math import gcddef generate_keypair(p, q):n = p * qphi_n = (p - 1) * (q - 1)//随机产生ee = random.randrange(1, phi_n)while gcd(e, phi_n) != 1:e = random.randrange(1, phi_n)d = multiplicative_inverse(e, phi_n)return ((e, n), (d, n))def multiplicative_inverse(e, phi_n):d = 0x1 = 0x2 = 1y1 = 1temp_phi = phi_nwhile e > 0:temp1 = temp_phi // etemp2 = temp_phi - temp1 * etemp_phi = ee = temp2x = x2 - temp1 * x1y = d - temp1 * y1x2 = x1x1 = xd = y1y1 = yif temp_phi == 1:return d + phi_ndef encrypt(public_key, message):e, n = public_keycipher = [pow(ord(char), e, n) for char in message]return cipherdef decrypt(private_key, cipher):d, n = private_keymessage = [chr(pow(char, d, n)) for char in cipher]return ''.join(message)# 生成公钥和私钥
p = 61
q = 53
public_key, private_key = generate_keypair(p, q)
print("e:",public_key,"d", private_key)
# 加密和解密示例
message = 'hello world'
print('明文:',message)
cipher = encrypt(public_key, message)
decrypted_message = decrypt(private_key, cipher)
print('加密后的信息:', cipher)
print('解密后的信息:', decrypted_message)

3.hash 

哈希算法(Hash Algorithm)。哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。

哈希算法与MD5、SHA - 知乎 (zhihu.com)

MD5算法 - 知乎 (zhihu.com)

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法) 

MD5 哈希算法是一种单向散列函数,它将任意长度的输入数据压缩成固定长度(通常为 128 位)的哈希值,而不会对原始明文进行加密。因此,在使用 MD5 进行哈希计算时,输入的数据可以是任何格式的字节流。

具体来说,可以将 MD5 算法应用于以下类型的数据:

  1. 纯文本字符串,例如 "Hello World!";
  2. 二进制格式的数据,例如图片、视频、音频、压缩文件等;
  3. 其他格式的文件,如PDF、Word文档和excel文件等。

在实际应用中,通常需要根据数据的实际情况选择适当的编码方式。例如,在处理纯文本字符串时,可能需要将其转换为字节流(例如使用 UTF-8 编码),然后再将其输入到 MD5 算法中进行哈希计算。而在处理二进制文件时,可以直接读取二进制数据并将其传递给 MD5 哈希算法进行计算。

密钥:是一种无需密钥的哈希算法,不需要使用额外的密钥作为输入参数。

import hashlib
# 定义一个函数,用于计算字符串的 MD5 哈希值
def md5_encrypt(s: str) -> str:m = hashlib.md5()m.update(s.encode('utf-8'))return m.hexdigest()
# 定义一个函数,用于验证字符串与给定的MD5哈希值是否匹配
def md5_decrypt(s: str, md5_hash: str) -> bool:return md5_encrypt(s) == md5_hash
# 定义一个主函数,演示如何使用上述两个函数进行加密和解密操作
def main():s = "Hello world"  # 待加密的字符串md5_hash = md5_encrypt(s)  # 计算字符串的哈希值print(f"{s} 的MD5哈希值为:{md5_hash}")# 验证字符串与给定的哈希值是否匹配if md5_decrypt(s, md5_hash):print("字符串与MD5哈希值一致!")else:print("字符串与MD5哈希值不一致!")if __name__ == "__main__":main()


http://www.ppmy.cn/news/152368.html

相关文章

Java多线程学习2

1. 多线程 线程与任务的关系 脱离了任务的线程是没有意义的 线程对象是通过Thread类来创建的 任务是通过Runnable接口来定义的 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 (与Runnable的区别,可以拿到返回值) Thread线程…

yolov5部署_jetson_deepstream_tensorrtx

此文档使用yolov5-v5.0以及对应版本的tensorrtx包 一、安装依赖包 sudo apt install \ libssl1.0.0 \ libgstreamer1.0-0 \ gstreamer1.0-tools \ gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad \ gstreamer1.0-plugins-ugly \ gstreamer1.0-libav \ libgstrtspserv…

矢量点积与矢量叉乘的微分

矢量点积与矢量叉乘的微分 ​ 在对矢量点积与叉乘的微分公式进行推导之前,我们先看看这两个公式长什么样 矢量点积的微分: d ( F ⃗ ⋅ x ⃗ ) x ⃗ d F ⃗ F ⃗ d x ⃗ (1) d(\vec{F}\cdot \vec{x}) \vec{x}d\vec{F} \vec{F}d\vec{x} \tag{1} d(…

备战2023 b组国赛 倒计时10天 (dfs的复习)

今天打算复习dfs的题目: 1.连通性模型 1112. 迷宫 - AcWing题库 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由 n∗n�∗� 的格点组成,每个格点只有2种状态,.和#,前者…

概率论中常见分布的数学期望、方差及特征函数推导(二)连续型随机变量

目录 1.正态分布2.均匀分布3.指数分布4.伽玛分布5.贝塔分布6.卡方分布7.柯西分布 1.正态分布 X ∼ N ( μ , σ ) X\thicksim N(\mu,\sigma) X∼N(μ,σ) f ( x ) 1 2 π σ e − ( x − μ ) 2 2 σ 2 , …

正态分布推导瑞利分布,瑞利信道的模型

从高斯分布推导瑞利分布 瑞利分布是无线通信中常见的信道模型,这里就来推导一下,所谓瑞利分布就是两个垂直分量服从独立且相同的标准高斯分布叠加之后的模。先来看看高斯分布的表达式 f ( x ) 1 2 π σ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x) \f…

10行代码,带你理解自然底数e、自然指数ln

引言 我们知道,e是一种常数,和 π \pi π类似,都是一种被计算出来的常数,在实际中具有非常广泛的应用。 基于自然底数e,我们常常会用到自然指数 e x e^x ex,自然对数 l n ( x ) ln(x) ln(x),但…

高数不定积分72题解答

题目来源:这72道积分题目会积了,绝对是高高手 题目作者: 湖心亭看雪 第一题 原式 ∫ 1 5 x 3 d x 1 5 ∫ 1 5 x 3 d ( 5 x 3 ) 1 5 l n ( 5 x 3 ) C \begin{aligned} \text{原式}&\int \frac{1}{5x3}dx \\ &\frac{1}{5} \i…