DES、AES和RSA加密算法
DES加密算法简介
DES(Data Encryption Standard)是目前最为流行的加密算法之一(它是分组密码)。
强加密使用的基本操作 -> 混淆与扩散
混淆:是一种使密钥与密文之间的关系尽可能的模糊的加密操作。
常用的一个元素就是->替换;在DES和AES中都有使用扩散:是一种为了隐藏明文的统计属性而将一个明文符号的影响
扩散到多个密文符号的加密操作。
最简单的扩散元素就是->位置换;它常用与DES中,AES用更高级的Mixcolumn操作
DES是一种使用56位密钥对64位长分组进行加密的密码
56+8奇偶校验位(第8,16,24,32,40,48,56,64)= 64位的密钥对以64位为单位的块数据进行加解密。
DES是一种对称密码,即其加密过程和解密过程使用相同的密钥。
与所有的现代分组加密一样,DES也是一种迭代算法。
DES对明文中每个分组的加密过程都包含16轮(每轮操作相同)
每轮都会使用不同的字密钥,所有子密钥都是从主密钥中推导而来
DES原理详解:https://blog.csdn.net/m0_37962600/article/details/79912654
python实现DES加密与解密
https://www.cnblogs.com/wangyanzhong123/p/10575739.html
https://my.oschina.net/liupengs/blog/124230
AES加密算法简介
高级加密标准(AES)是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。
根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128、AES-192和AES-256。
3种的思路基本一样,只是轮数会适当增加
AES加密过程涉及到4种操作:
字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)
解密过程分别为对应的逆操作。
AES原理详解:https://www.cnblogs.com/luop/p/4334160.html
python实现AES加密与解密
#coding=utf-8
#PyCrypto的开发工作于 2012 年就已停止,有一个该项目的分支 PyCrytodome 取代了它
from Crypto.Cipher import AES
from Crypto.Util import Counter #CTR密码模式计数器功能
from Crypto import Random #用来生成随机数
import binascii #包含用C语言编写的低级函数
#pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
#匿名函数,不用return 自动返回
flag = 'AES-test-wintrysec'
key = Random.get_random_bytes(16) #生成密钥,返回长度为16的随机字符串
print ('随机密钥:'+str(binascii.b2a_hex(key)))#返回二进制数据的十六进制表示。这里输出了随机生成的密钥
#数据的每个字节都转换为相应的2位十六进制表示。因此,结果字符串的长度是数据长度的两倍
prefix = Random.get_random_bytes(4)#固定前缀,返回长度为n的随机字符串,这里n=4
# print('prefix:'+prefix)
suffix = Random.get_random_bytes(4)#固定后缀
# print('suffix:'+suffix)
def enc(plaintext):
count = Counter.new(64, prefix=prefix, suffix=suffix) #实例化CTR密码对象
cipher = AES.new(key, AES.MODE_CTR, counter=count)#以大端模式编码的计数器字段
#print('text'+binascii.hexlify(pad(plaintext)))#返回二进制数据的十六进制表示
return cipher.encrypt(plaintext)#返回加密结果
def dec(ciphertext,key):
count = Counter.new(64, prefix=prefix, suffix=suffix) #实例化CTR密码对象
cipher = AES.new(key, AES.MODE_CTR, counter=count)#以大端模式编码的计数器字段
return cipher.decrypt(ciphertext)
if __name__ == "__main__":
plaintext=flag.encode('utf-8')
text = enc(plaintext)
#print(type(text))
print ('加密结果:'+str(binascii.b2a_hqx(enc(plaintext))))
print ('解密结果:'+str(dec(text,key))+'\n')
RSA加密算法概述
RSA算法一直是最广为使用的"非对称加密算法"。
毫不夸张地说,只要有计算机网络的地方,就有RSA算法
这种算法非常可靠,密钥越长,它就越难破解
RSA算法详解:
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
python实现RSA算法
1.手工实现(没用第三方库)
https://github.com/SliverYou/RSA-Cipher
2.PyCrytodome(PyCrypto)库实现
https://www.zhangshengrong.com/p/2Y1kJ3pXZe/
https://pycryptodome.readthedocs.io/en/latest/src/public_key/rsa.html
https://pycryptodome.readthedocs.io/en/latest/src/examples.html
DES、AES和RSA加密算法的更多相关文章
- 浅析DES、AES、RSA、MD5加密算法及其应用场景
对称加密算法DES 算法:一种典型的块加密方法,将固定长度的明文通过一系列复杂的操作变成同样长度的密文,块的长度为64位.同时,DES 使用的密钥来自定义变换过程,因此算法认为只有持有加密所用的密钥的 ...
- C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)
一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应 ...
- 对称(DES/AES)与非对称(RSA/SSL/数字证书)加密介绍及实际应用
本文不对具体的算法做深入研究,只是讲解各种安全算法的原理和使用场景. 一.数据校验算法 数据校验,是为保护数据的完整性,用一种指定的算法对原始数据计算出的一个校验值.当接收方用同样的算法再算一次校验值 ...
- Atitit.加密算法 des aes 各个语言不同的原理与解决方案java php c#
Atitit.加密算法 des aes 各个语言不同的原理与解决方案java php c# 1. 加密算法的参数::算法/模式/填充 1 2. 标准加密api使用流程1 2.1. Md5——16bi ...
- Java使用Cipher类实现加密,包括DES,DES3,AES和RSA加密
一.先看一个简单加密,解密实现 1.1 加密 /** * content: 加密内容 * slatKey: 加密的盐,16位字符串 * vectorKey: 加密的向量,16位字符串 */ publi ...
- When I see you again(加密原理介绍,代码实现DES、AES、RSA、Base64、MD5)
关于网络安全的数据加密部分,本来打算总结一篇博客搞定,没想到东西太多,这已是第三篇了,而且这篇写了多次,熬了多次夜,真是again and again.起个名字:数据加密三部曲,前两部链接如下: 整体 ...
- 加密原理介绍,代码实现DES、AES、RSA、Base64、MD5
阅读目录 github下载地址 一.DES对称加密 二.AES对称加密 三.RSA非对称加密 四.实际使用 五.关于Padding 关于电脑终端Openssl加密解密命令 关于网络安全的数据加密部分, ...
- JAVA 加密算法初探DES&AES
开发项目中需要将重要数据缓存在本地以便在离线是读取,如果不对数据进行处理,很容易造成损失.所以,我们一般对此类数据进行加密处理.这里,主要介绍两种简单的加密算法:DES&AES. 先简单介绍一 ...
- 常用对称加密算法(DES/AES)类(PHP)
看注释,啥也不说了,欢迎各种跨平台测试! /** * 常用对称加密算法类 * 支持密钥:64/128/256 bit(字节长度8/16/32) * 支持算法:DES/AES(根据密钥长度自动匹配使用: ...
随机推荐
- Servlet中的请求转发RequestDispatcher接口的forword与Include的区别
RequestDispatcher接口中具有两个方法: forward() 与 include() 均 可完成请求 的转发.区别如下: forword(): 使用该方法,则当前 的 Servlet 中 ...
- linux系统下nginx/mysql/php启动、停止、重启命令
/usr/local/nginx/sbin/nginx /etc/init.d/mysql start /usr/local/php/sbin/php-fpm start #nginx命令 ...
- js上传超大文件解决方案
需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...
- 2018 焦作网络赛 K Transport Ship ( 二进制优化 01 背包 )
题目链接 题意 : 给出若干个物品的数量和单个的重量.问你能不能刚好组成总重 S 分析 : 由于物品过多.想到二进制优化 其实这篇博客就是存个二进制优化的写法 关于二进制优化的详情.百度一下有更多资料 ...
- NOI 2017滚粗退役记
NOI 2017 游记 又到了OIer退役了的季节 Day -1 今天是报到日. 中午11点多的动车.动车上和dick32165401和runzhe2000谈笑风生.顺便用dick32165401的流 ...
- MySQL datetime 和 timestamp 的区别
[转载]:MySQL中有关TIMESTAMP和DATETIME的总结 1. datetime 和 timestamp 的相同点 两者都可以用来表示YYYY-MM-DD HH:MM:SS[.fracti ...
- 学号 20175329 《Java程序设计》第10周学习总结
20175329 <Java程序设计>第十周学习总结 教材学习内容总结 线程与进程 进程时程序的一次动态执行过程.线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程. J ...
- 6 Java Shell排序
希尔排序是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序. 1.基本思想 将待排序数组按照步长gap进行分组,然后将 ...
- LeetCode 260. 只出现一次的数字 III(Single Number III)
题目描述 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...
- 尚学堂requireJs课程---3、私有和公有属性和方法
尚学堂requireJs课程---3.私有和公有属性和方法 一.总结 一句话总结: 在 [模块] 的基础上,在return对象里面的方法和属性就是公有的(因为外部可以访问),不在的就是私有的 < ...