DES,RAS,HASH

news2024/11/25 6:31:46

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

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 gcd

def generate_keypair(p, q):
    n = p * q
    phi_n = (p - 1) * (q - 1)
    //随机产生e
    e = 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 = 0
    x1 = 0
    x2 = 1
    y1 = 1
    temp_phi = phi_n

    while e > 0:
        temp1 = temp_phi // e
        temp2 = temp_phi - temp1 * e
        temp_phi = e
        e = temp2

        x = x2 - temp1 * x1
        y = d - temp1 * y1
        x2 = x1
        x1 = x
        d = y1
        y1 = y

    if temp_phi == 1:
        return d + phi_n

def encrypt(public_key, message):
    e, n = public_key
    cipher = [pow(ord(char), e, n) for char in message]
    return cipher

def decrypt(private_key, cipher):
    d, n = private_key
    message = [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.coloradmin.cn/o/599222.html

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

相关文章

秋招笔试零基础怎么办?自顶向下真题学习法,这样准备就稳啦!

秋招笔试零基础怎么办?自顶向下真题学习法,这样准备就稳啦 秋招临近,是时候提前准备笔试了。想必各位都忙着刷穿leetcode的剑指Offer,或者牛客的往年真题等等 但你真的了解自己的算法知识板块哪里有纰漏吗? 你知道今…

【C++】初识STL

目录 🌞专栏导读 🌛什么是STL 🌛STL的版本 🌛STL的六大组件 🌛STL的重要性 🌛STL的缺陷 🌞专栏导读 🌟作者简介:日出等日落,在读本科生一枚&#xff0…

nginx网站安装服务

nginx概述 一款高性能、轻量级web服务软件稳定性高系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30000~50000个并发请求 正向代理:通过代理服务器来访问资源,这种代理服务成为正向代理 反向代理:客户端与代理是无感知的&…

【Go LeetDay】总目录(1~83)

Leetcode Golang Day1~10 Golang每日一练(leetDay0001) 1. 两数之和 Two Sum 2. 两数相加 Add Two Numbers 3. 无重复字符的最长子串 Longest-substring-without-repeating-characters Golang每日一练(leetDay0002) 4. 寻找两个正序数组的中位数 Median of two sorted arra…

如何通过帮助文档来减少你的客服咨询量,提高工作效率

相信你的公司网站或者产品中总会设置一个“联系我们”按钮,让客户能够遇到问题随时能够找到客服人员并且快速解决,在创业初期,可能这样的模式没有问题,但是随着客户越来越多,客服的需求也随之增加,客服人员…

【iOS】--对象的底层结构

源码 先转一下源码 //#import <Foundation/Foundation.h> #import <objc/runtime.h>interface LGPerson : NSObject property (nonatomic, strong) NSString *KCName; endimplementation LGPersonendint main(int argc, const char * argv[]) {autoreleasepool {…

DVWA-XSS (Stored) Low/Medium/High低中高级别

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 XSS Stroed 一、Low级别二、Medium级别三、Hign级别 这关是一个论坛功能&#xff0c;把用…

设计模式(六):结构型之代理模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 目录 一、…

深入分析——Linux DMA Fence

目录 一 简介 二 基本原理 三 代码实现 3.1 Init 3.2 wait 3.3 signaling 3.4 callback 3.5 signaled 3.6 signal 3.7 refcount & release 四 Fence Status 一 简介 dma-fence是linux 内核中同步原语&#xff0c;它只有两种状态signaled和unsigned。因为其本身的…

华为OD机试之找出经过特定点的路径长度(Java源码)

找出经过特定点的路径长度 题目描述 无 输入描述 输入一个字符串&#xff0c;都是以大写字母组成&#xff0c;每个相邻的距离是 1&#xff0c; 第二行输入一个字符串&#xff0c;表示必过的点。 说明每个点可过多次。 输出描述 经过这些必过点的最小距离是多少 用例 输入 ANT…

OpenGL之坐标系统

文章目录 概述局部空间世界空间观察空间裁剪空间正射投影透视投影 进入3D代码 OpenGL希望在每次顶点着色器运行后&#xff0c;我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#xff0c;每个顶点的x&#xff0c;y&#xff0c;z坐标都应该…

基于diffusers训练lora,AI换装

阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台欢迎登录阿里云&#xff0c;全球领先的云计算及人工智能科技公司&#xff0c;阿里云为200多个国家和地区的企业、开发者和政府机构提供云计算基础服务及解决方案。阿里云云计算、安全、大数据、人工智能、企业…

设计模式(四):创建型之建造者模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(三)&#xff1a;创建型之原型模式 设计模式(四)&#xff1a;创建型之建造者模式 目录 一、设计模式分类二、建造者模式1、概述2、结构3、实例…

Win10设置 Java 环境变量

文章目录 概要下载jdk安装jdk配置环境变量测试环境变量是否配置成功总结 概要 学习java开发首先需要安装jdk,并设置环境变量。 接下来就来介绍一下如何在 windows 10 系统中配置java环境变量 下载jdk https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe…

C#,生信软件实践(06)——DNA数据库GenBank文件的详解介绍及解释器之完整C#源代码

1 GenBank 1.1 NCBI——美国国家生物技术信息中心&#xff08;美国国立生物技术信息中心&#xff09; NCBI&#xff08;美国国立生物技术信息中心&#xff09;是在NIH的国立医学图书馆&#xff08;NLM&#xff09;的一个分支。它的使命包括四项任务&#xff1a;1. 建立关于分…

LIBEVENT 框架

LIBEVENT 框架 LAMPlibevent特点:libevent的功能libevent官网安装步骤Linux下libevent主要API介绍libevent使用步骤libevent 编程案例LAMP 从LAMP说起: 是一个缩写,它指一组通常一起使用来运行动态网站或者服务器的自由软件 Linux - 操作系统Apache - 网页服务器MySQL - 数据…

Automatic Prompt Optimization with “Gradient Descent” and Beam Search

在“自然语言域”使用类似梯度下降的方法优化prompt 整篇文章比较精髓的思想在于 利用LLM本身去寻找prompt的瑕疵。将语言模型的输出 y ^ \hat{y} y^​与正确答案&#xff08;label&#xff09; y y y还有prompt p p p 一起送入LLM&#xff0c;并通过类似“What is wrong wi…

如果提取音乐的伴奏和人声,分享两个方法给大家!

音乐中的伴奏提取一直是许多音频爱好者关注的话题。在本文中&#xff0c;我们将介绍两种简单易用的方法&#xff0c;并且特别推荐一款记灵在线工具&#xff0c;它能够帮助你轻松提取音乐伴奏&#xff0c;并且支持批量处理&#xff01; 方法一&#xff1a;Audacity 首先&#…

centos7 编译bluez ARM版本及undefined reference to `g_thread_new‘

在我辛辛苦苦编译成功 glib 库后&#xff08;看我上一篇文章 centos7 glib2.0 arm版本的编译&#xff09;&#xff0c;以为可以顺利编译我的 bluez ARM 版本&#xff0c;结果出现了最后一个错误&#xff08;其中一个是私有库里的&#xff09;&#xff0c;如&#xff1a; 就是这…

英文论文(sci)解读复现【NO.15】学习聚合多尺度背景的实例分割在遥感图像

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…