`
royboy
  • 浏览: 69124 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

AES加密实例

阅读更多

接上篇,这次写个AES加密的实例,作为DES加密的替代者,它更加安全,使用也较为广泛。

 

AES加密工具类:

package com.royboy.encrypt;

import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class AESEncrypt {
	
	/**
	 *密钥算法 
	 */
	private static final String KEY_ALGORITHM = "AES";
	
	/**
	 * 加密、解密算法/工作模式/填充方式
	 */
	private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
	
	/**
	 * 得到密钥
	 * @return
	 */
	public static byte[] initKey() throws Exception{
		//实例化密钥生成器
		KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
		/*
		 * 初始化 
		 * 如需要256位的密钥需要无政策限制权限文件或者用Bouncy Castle提供的算法
		 * */
		kg.init(128);
		//生成密钥
		SecretKey secretKey = kg.generateKey();
		//获得二进制编码的密钥
		return secretKey.getEncoded();
	}
	
	/**
	 * 封装密钥
	 * @param key 二进制密钥
	 * @return
	 */
	private static Key decorateKey(byte[] key){
		//实例化密钥材料
		SecretKey secretKey = new SecretKeySpec(key,KEY_ALGORITHM);
		return secretKey;
	}
	
	/**
	 * 加密数据
	 * @param data 加密前的数据
	 * @param key 密钥
	 * @return 加密后的数据
	 */
	public static byte[] encryptData(byte[] data,byte[] key) throws Exception{
		Key k = decorateKey(key);
		//实例化
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
		//实始化,设置为加密模式
		cipher.init(Cipher.ENCRYPT_MODE, k);
		return cipher.doFinal(data);
	}
	
	/**
	 * 解密数据
	 * @param data 加密的数据
	 * @param key 密钥
	 * @return 解密后的数据
	 */
	public static byte[] decryptData(byte[] data,byte[] key) throws Exception{
		Key k = decorateKey(key);
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
		//实始化,设置为解密模式
		cipher.init(Cipher.DECRYPT_MODE, k);
		return cipher.doFinal(data);
	}
}
 

 

AES加密测试类:

 

package com.royboy.encrypt;

import org.junit.Test;
import static org.junit.Assert.*;
import com.sun.org.apache.xml.internal.security.utils.Base64;
public class AESTester {
	
	/**
	 * AES数据加/解密测试
	 * @throws Exception
	 */
	@Test
	public final void test() throws Exception{
		String primevalData = "《孙子兵法》 《春秋战国》";
		byte[] data = primevalData.getBytes();
		System.out.println("原始内容:"+primevalData);
		//得到密钥
		byte[] key = AESEncrypt.initKey();
		System.out.println("加密密钥:"+Base64.encode(key));
		byte[] encrypt = AESEncrypt.encryptData(data, key);
		System.out.println("加密数据:"+Base64.encode(encrypt));
		byte[] decrypt = AESEncrypt.decryptData(encrypt, key);
		String decryptStr = new String(decrypt);
		System.out.println("解密数据:"+decryptStr);
		assertEquals(primevalData,decryptStr);
	}
}
 

 

分享到:
评论

相关推荐

    Python AES加密实例解析

    AES(Advanced Encryption Standard)是一种广泛使用的块加密标准,由美国国家标准...这个实例解析提供了一个基本的AES加密和解密流程,实际应用中可能还需要考虑如错误处理、密钥管理、数据完整性校验等更多复杂因素。

    Delphi AES加密算法实例程序.rar

    Delphi AES加密算法实例程序,包括了加密算法的接口应用,包含 2 个过程和 2 个字符加密函数,支持 128 位密匙加密和解密字符串。重新修改加密模式,支持 128、192 和 256 位密匙加密。  改动函数参数表,添加 Key...

    android使用AES加密和解密文件实例代码

    Android 使用 AES 加密和解密文件实例代码 在 Android 应用程序中,使用 AES(Advanced Encryption Standard)加密和解密文件是一种常见的安全措施。本文将详细介绍 Android 使用 AES 加密和解密文件的实例代码,并...

    c# AES加密

    这个类提供了创建、配置和管理AES加密实例的方法。 3. **AES加密步骤**: - **初始化**:首先需要创建一个`Aes`对象,并设置密钥和初始向量(IV)。密钥是决定加密强度的关键,而初始向量在CBC模式下是必要的。 -...

    java AES加密 解决加密过长非法异常问题

    在处理加密过程中,可能会遇到“非法参数”异常,这通常是因为输入数据长度不符合AES加密的要求。AES加密算法有固定的数据块大小,对于AES-128,这个大小是16个字节(或128位)。当输入数据长度不是16字节的倍数时,...

    QT 实现AES 加密算法

    AES加密算法基于替换和置换的原理,它使用了固定的区块大小128位,并有三种密钥长度:128位、192位和256位。在AES加密过程中,数据被分为128位的数据块,然后经过多次的混合和轮变换,使得原始数据变得难以破解。 ...

    aes.rar_AES_AES加密_visual c

    **AES加密算法详解** AES(Advanced Encryption ...Visual C++实现的AES加密实例,让开发者能够直观地了解和使用这一强大的加密工具。通过学习和实践,我们可以更好地应对信息安全挑战,保护数据不被非法访问。

    c++ AES加密.zip

    C++实现AES加密通常涉及到几个关键概念和步骤...综上所述,这个资源提供了C++环境下使用AES加密的实例,涵盖了从库的构建到实际应用的全过程,对于学习和理解AES加密技术以及在C++中如何实现和测试加密功能非常有价值。

    aes加密算法实例(自己试验用的)

    在本文中,我们将深入探讨AES加密算法的基本原理、工作方式以及如何通过实例来理解和应用它。 AES最初由比利时密码学家Joan Daemen和Vincent Rijmen设计,2001年被美国国家标准与技术研究所(NIST)采纳为新的联邦...

    qt5AES加密,ES加密/解密算法是一种可逆的对称加密算法,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推

    **标题与描述解析** 标题和描述中提到的“qt5AES加密”是指使用Qt5框架实现的AES(Advanced Encryption..."Qt-AES"文件可能提供了在Qt5中实现AES加密的具体实例,对于理解和应用AES加密在Qt环境下的开发具有参考价值。

    C#写的大文件AES加密解密程序

    1. **AES类的实例化**:首先,需要创建一个AES加密器实例,设置密钥和初始化向量(IV)。密钥和IV是AES加密的重要参数,它们的长度根据所选的AES模式(如CBC、ECB等)有所不同,通常密钥应保持为128、192或256位。 ...

    Java使用AES加密和解密的实例详解

    Java使用AES加密和解密的实例详解 Java使用AES加密和解密的实例详解主要介绍了Java使用AES加密和解密的实例详解的相关资料,需要的朋友可以参考下。 AES加密是一种对称的加密算法,可以基于相同的密钥进行加密和...

    Android下AES加密算法的JNI实现(包含SO文件)

    在Android应用中,AES加密通常用于保护数据的安全,例如存储敏感信息、网络通信中的数据传输等。C语言实现的AES加密算法能够提高执行效率,尤其是在处理大量数据时。 首先,我们需要了解AES加密的基本流程。AES包含...

    AES加密.rar java Aes加密方式

    Java平台提供了丰富的库支持AES加密,使得开发人员可以方便地在Java应用程序中集成这种强大的加密技术。 在Java中实现AES加密,主要涉及到以下几个关键步骤和知识点: 1. 密钥生成:AES加密需要一个密钥来执行加...

    AES加密解密详细演示AES加密解密过程

    **AES加密解密详解** AES(Advanced Encryption Standard),即高级加密标准,是美国国家标准与技术研究所(NIST)制定的一种广泛使用的对称密钥加密算法。AES的核心是Rijndael算法,它满足了多项安全要求,包括...

    AES加密算法示例,一个完整的maven项目

    **AES加密算法** AES,全称为“高级加密标准”(Advanced Encryption Standard),是目前广泛使用的对称加密算法,尤其在数据...如果你正在寻找一个快速了解和实践AES加密的实例,那么这个项目将是一个不错的选择。

    C# AES加密解密小工具

    总之,“C# AES加密解密小工具”是一个实用的开发辅助工具,它简化了AES加密和解密的过程,使开发者能够快速地为自己的应用程序添加数据加密功能。在实际应用中,为了提高安全性,可以考虑使用更安全的加密模式,如...

    基于AES与SHA-256的Linux内核态数据加密.pdf

    本文探讨了基于AES和SHA-256的Linux内核态数据加密方案,该方案结合AES加密算法和SHA-256哈希散列算法,实现了数据保护和密钥文件管理。该方案的关键点在于使用AES算法和SHA-256算法对数据进行加密,并使用Linux内核...

    VB.NET实现AES加密解密

    VB.NET实现AES加密解密代码,可直接使用

Global site tag (gtag.js) - Google Analytics