AES的加密和解密
- 格式:ppt
- 大小:360.00 KB
- 文档页数:10


龙源期刊网
基于AES的软件加密解密的设计与实现
作者:唐高阳 孙世坤
来源:《科技视界》2015年第18期
【摘 要】随着计算机的普及以及重视知识产权保护,使得软件加密技术蓬勃兴起,AES算法正取代DES算法成为使用广泛的新标准。介绍了如何运用AES算法对文档进行加密和解密,并给出了一个基于Visual C++ 2010开发平台和AES算法的实例。
【关键词】软件加密;AES算法;S盒
1 AES算法基本原理
AES(Advanced Encryption Standard,高级加密标准)是一个对称分组算法,用来取代DES算法,从而成为使用广泛的新标准。选用Rijndael算法来作为AES,Rijndael是比利时的两位密码学家Daemen和Rijmen共同设计的。Rijndael算法是具有分组长度和密钥长度均可变的分组算法。密钥长度和分组长度可以独立地指定为128位、192位或是256位。
Feistel结构是数据分组中的一半被用来修改数据分组中另外一半,然后交换这两部分,AES算法不是Feistel结构的算法。AES定义了一个S盒,它是由16×16个字节组成的矩阵,包含了8位值所能表达的256种可能的变换。
1.1 字节代换
AES中输入分组是用以字节为单位的正方形矩阵来描述的,该分组被复制到State数组,这个数组在加密或解密的每个阶段都会被改变,运算完最后的轮密钥加变换后,State被复制到输出矩阵中。字节代换是一个简单的查表操作,用State数组中的每个字节的高4位作为行值,低4位作为列值,然后取S盒中对应行列的元素作为输出,最后把State数组的该字节用输出的这个元素替换。例如,十六进制值19,所对应的S盒的行值是1,列值是9,S盒中在此位置的值是D4,然后用D4替换19。
AES对称加密和解密(转)
AES对称加密和解密
package demo.security;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Scanner;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/*
* AES对称加密和解密
*/
public class SymmetricEncoder {
/*
* 加密
* 1.构造密钥⽣成器
* 2.根据ecnodeRules规则初始化密钥⽣成器
* 3.产⽣密钥
* 4.创建和初始化密码器
* 5.内容加密
* 6.返回字符串
*/
public static String AESEncode(String encodeRules,String content){
AES加密算法的要求及密钥生成
随着密码分析技术的不断发展,des对称密码算法变得不那么安全,于是美国国家标准与技术局发出了关于开发新的加密标准:
1、 应是对称加密算法,具有可变长度的密钥(128、192或256位),一个128位的块:
2、 应比三重DES更安全;
3、 应可应用于公共领域并免费提供;
4、 应至少在30年是安全的。
经过最后的测试NITS宣布了最终的获胜者,这就是AES,AES是一种灵活的算法,其块的大小可变,密钥大小可变,迭代次数也可变,而且迭代次数与块和密钥大小有关。正因为其灵活,AES实际上有三个版本:AES-128、AES-129和AES-256。常见的AES结构图如下:
AES首先将明文按字节分成列。前4个字节组成一列,接下来的4个字节组成第二列,以此类推如果块为128位,那么就可以组成一个4X4的矩阵。
密钥生成
密钥是按矩阵的列进行分组的,然后添加40个新列来进行扩充。如果前4列(即由密钥给定的那些列)位W()、W()、W()和W(),那么新列以递归方式产生。如果i是4的倍数,那么第i列由等式W(i)=W(i-4)XORT(i-1)确定。
如果不是4的倍数,那么第i列由等式
其中T[W(i-1)]是W(i-1)的一种转换形式,按一下方式实现:
1、 循环的将W(i-1)的元素位移,每次一个字节,也就是说,abcd变成dcba;
2、 将这4个字节作为S盒的输入,输出新的4个字节efgh:
3、 计算这一轮的常量
4、 这样生成转后后的
由于AES非常小,运行速度快,密钥大小128位,安全可靠,因此它不仅用于安全要求比三重DES更高的应用中,而且可用于计算资源有限的应用中。
AES加密解密(CBC模式)
AES是一种高级加密标准(Advanced Encryption Standard),它是一种对称加密算法,意味着加密和解密使用相同的密钥。在AES加密算法中,数据被分成固定长度的块,并使用密钥进行加密。
CBC(Cipher Block Chaining)是一种常用的AES模式,它在加密过程中使用前一个密文块来影响下一个明文块的加密结果。这种模式可以提高加密的安全性。
1. 初始化向量(Initialization Vector,IV):CBC模式需要一个初始向量来开始加密过程。IV是一个固定长度的随机数,长度通常和加密算法的块大小相同,例如AES的块大小是128位,则IV的长度也是128位。IV可以是预先协商好的随机数,也可以是随机生成的。
2.明文分块:将要加密的数据按照加密算法的块大小进行分块。
3.异或操作:将每一块明文数据与上一块的加密结果进行异或操作。对于第一个数据块,与IV进行异或。
4.加密操作:使用密钥对异或后的数据块进行加密。AES加密算法使用轮函数和逆向轮函数将数据块进行多轮加密。
5.密文生成:将加密后的数据块作为密文输出。
解密过程与加密过程类似:
1.初始化向量(IV):解密的过程中需要使用相同的IV。
2.密文分块:将要解密的数据按照加密算法的块大小进行分块。 3.解密操作:使用密钥对密文数据块进行解密。解密使用的是AES的逆向轮函数。
4.异或操作:将解密后的数据块与前一个密文块(或IV)进行异或操作。
5.明文生成:将异或后的数据块作为解密后的明文输出。
需要注意的是,AES加密和解密过程中使用的密钥必须是相同的,而且必须是保密的。加密后的密文只有通过使用相同的密钥和解密算法才能正确解密。
以上是AES加密解密(CBC模式)的基本过程,可以通过编程语言实现。在实际应用中,还需要注意密钥的保护、IV的生成和管理、数据完整性验证等问题,以保证数据的安全性。