当前位置:   article > 正文

2021-11-01_aes替换des

aes替换des

AES简介

AES简介
AES(Advanced Encryption Standars)高级加密标准,又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。AES是用来替换DES的,已经被广泛应用于各行各业。AES由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

AES算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之名命之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 “Rhine doll”。)

AES是对称加密算法。AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES使用几种不同的方法来执行排列和置换运算。AES是一个迭代的、对称密钥分组的密码。AES 加密有 AES-128、AES-192、AES-256 三种。分别对应三种密钥长度 128bits(16字节)、192bits(24字节)、256bits(32字节)。当然,密钥越长,安全性越高,加解密花费时间也越长。默认的是AES-128,其安全性完全够用。与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

AES是基于数据块的加密方式,也就是说,每次处理的数据是一块(16字节),当数据不是16字节的倍数时会进行填充,这就是所谓的分组密码(区别于基于比特位的流密码),16字节是分组长度。

python实现

python需要安装 pycryptodome 库,装方法:pip install pycryptodome
(用pip装各种库有时候是一件很痛苦的事情,后期有时间单独写一篇博客分析一下各种坑~~~~,不会装的访问一下这个 神奇的网站.)
(刚刚安装Crtpto库时又遇到了一个坑!!!居然用pip install Crypto命令时报错如下
在这里插入图片描述网上查明原因竟然是我开启了VPN!!!!!)

pip报错种类太多了,该话题后期再聊,继续这次的主角,上代码!

下面展示python代码

CBC模式

import base64
from Crypto.Cipher import AES
# 密钥(key), 密斯偏移量(iv) CBC模式加密
 
def AES_Encrypt(key, data):
    vi = '0102030405060708'
    pad = lambda s: s + (16 - len(s)%16) * chr(16 - len(s)%16)
    data = pad(data)
    # 字符串补位
    cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
    encryptedbytes = cipher.encrypt(data.encode('utf8'))
    # 加密后得到的是bytes类型的数据
    encodestrs = base64.b64encode(encryptedbytes)
    # 使用Base64进行编码,返回byte字符串
    enctext = encodestrs.decode('utf8')
    # 对byte字符串按utf-8进行解码
    return enctext
 
 
def AES_Decrypt(key, data):
    vi = '0102030405060708'
    data = data.encode('utf8')
    encodebytes = base64.decodebytes(data)
    # 将加密数据转换位bytes类型数据
    cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
    text_decrypted = cipher.decrypt(encodebytes)
    unpad = lambda s: s[0:-s[-1]]
    text_decrypted = unpad(text_decrypted)
    # 去补位
    text_decrypted = text_decrypted.decode('utf8')
    return text_decrypted
 
 
key = '8Vh1Py0Eg8Ks8Ji7'
data = '123456'
AES_Encrypt(key, data)
enctext = AES_Encrypt(key, data)   #加密后的字符串
text_decrypted = AES_Decrypt(key, enctext)  #加密的字符串
print("加密的字符串为:",text_decrypted)
print("加密后的字符串为:",enctext)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

ECB模式

from Crypto.Cipher import AES
import base64
 
BLOCK_SIZE = 16  # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * chr(BLOCK_SIZE - len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
 
#加密函数
def aesEncrypt(key, data):
    '''
    AESECB模式加密方法
    :param key: 密钥
    :param data:被加密字符串(明文)
    :return:密文
    '''
    key = key.encode('utf8')
    # 字符串补位
    data = pad(data)
    cipher = AES.new(key, AES.MODE_ECB)
    # 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串
    result = cipher.encrypt(data.encode())
    encodestrs = base64.b64encode(result)
    enctext = encodestrs.decode('utf8')
    return enctext
#解密函数
def aesDecrypt(key, data):
    '''
    :param key: 密钥
    :param data: 加密后的数据(密文)
    :return:明文
    '''
    key = key.encode('utf8')
    data = base64.b64decode(data)
    cipher = AES.new(key, AES.MODE_ECB)
 
    # 去补位
    text_decrypted = unpad(cipher.decrypt(data))
    text_decrypted = text_decrypted.decode('utf8')
    return text_decrypted
 
if __name__ == '__main__':
    key = '8Vh1Py0Eg8Ks8Ji7'
    data = '123456'
 
    enctext = aesEncrypt(key, data)
    text_decrypted = aesDecrypt(key, enctext)
    print("加密的字符串为:",text_decrypted)
    print("加密后的字符串为:",enctext)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/676436
推荐阅读
相关标签
  

闽ICP备14008679号