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')

猜你喜欢

转载自www.cnblogs.com/wintrysec/p/10889023.html
今日推荐