常见的加密算法原理与实现:AES加密

本文介绍了AES加密算法的基本原理,包括AES的三个核心要素:秘钥、填充和模式。详细阐述了秘钥在加密解密中的作用,填充的必要性和常见方式,以及AES的不同工作模式。同时,文章还提供了Python和NodeJS环境下AES加密的实现代码示例。
摘要由CSDN通过智能技术生成

一、基本介绍

AES加密是一种对称加密算法,其全称为 :Advanced Encryption Standard,是DES(Data Encryption Standard)加密算法的升级替代版,也是目前最为流行的对称加密算法之一,之所以说是对称加密算法,是因为AES的加密和解密都是使用同一个秘钥完成。
在这里插入图片描述

二、AES的三个核心要素

AES加密算法的实现,需要秘钥、填充与模式这三者的配合使用,三者的概念如下:

2.1、秘钥

秘钥是实现AES加密与解密的根本,AES支持三种长度的密钥: 128位, 192位, 256位,其中AES256安全性最高,而AES128性能最高,因为加密处理的复杂度不同,秘钥越长,加密处理轮数越多。

2.2、填充

之所以需要用到填充,是因为AES加密是分组加密,也就是并不是直接将明文全部统一加密,而是对明文进行分组,拆成一个个独立的明文块(每个明文块长度都是128bit),之后对每个明文块独立加密,形成不同的密文块,最后将这些明文块拼接起来形成最终的加密结果。

在这里插入图片描述

由于AES明文块拆分的长度固定为128bit,当一段长度不足128bit,或者超过128bit,但不是其倍数时,我们就没法把明文按128bit长度分成等长的明文块,这时候就需要对明文块进行填充,将其补齐为128bit。

AES填充方式有以下几种:

• NoPadding
• PKCS7Padding
• ZeroPadding
• AnsiX923
• Iso10126
• Iso97971

比较常见的是这四种:NoPadding、PKCS7Padding、ZeroPadding、Iso10126。

  • NoPadding是指不做任何填充,但是要求明文块的长度必须是128bit,也就是明文的总长度必须为128位的整数倍。
  • PKCS7Padding是当明文块的长度不足16个字节(128bit)时,按照缺少的字节数(假设为n),填充n个字节,并且每个字节的值都等于n。比如明文:{1,2,3,4,5,a,b,c,d,e,f},缺少5个字节,则补全为{1,2,3,4,5,a,b,c,d,e,f,5,5,5,5,5}。
  • ZeroPadding顾名思义,是用0来进行填充,虽然填充方式比较简单,但并不是很好用,因为如果明文块最后一位也是0时,解密时就容易出错。
  • Iso10126填充与PKCS7相似,同样是按缺少的字节(假设为n)数来填充,但其填充的最后一个字节为n,其余字节填充随机数。

2.3、模式

AES的工作模式体现在把明文块加密成密文块的过程中,AES加密算法提供了五种不同的工作模式:


    ECB: 电码本模式(Electronic Codebook Book)
    CBC: 密码分组链接模式(Cipher Block Chaining)
    CTR: 计算器模式(Counter)
    CFB: 密码反馈模式(Cipher FeedBack)
    OFB: 输出反馈模式(Output FeedBack)

比较常见的两种模式就是ECB和CBC模式:

ECB模式是最简单的模式,该模式下每个明

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值