`
阿尔萨斯
  • 浏览: 4275331 次
社区版块
存档分类
最新评论

Java加密算法 AES

 
阅读更多
package com.stone.security;

import java.util.Arrays;

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

/**
 * AES 算法 对称加密,密码学中的高级加密标准 2005年成为有效标准 
 * @author stone
 * @date 2014-03-10 06:49:19
 */
public class AES {
	static Cipher cipher;
	static final String KEY_ALGORITHM = "AES";
	static final String CIPHER_ALGORITHM_ECB = "AES/ECB/PKCS5Padding";
	/*
	 * 
	 */
	static final String CIPHER_ALGORITHM_CBC = "AES/CBC/PKCS5Padding";
	/* 
	 * AES/CBC/NoPadding 要求
	 * 密钥必须是16位的;Initialization vector (IV) 必须是16位
	 * 待加密内容的长度必须是16的倍数,如果不是16的倍数,就会出如下异常:
	 * javax.crypto.IllegalBlockSizeException: Input length not multiple of 16 bytes
	 * 
	 *  由于固定了位数,所以对于被加密数据有中文的, 加、解密不完整
	 *  
	 *  可 以看到,在原始数据长度为16的整数n倍时,假如原始数据长度等于16*n,则使用NoPadding时加密后数据长度等于16*n,
	 *  其它情况下加密数据长 度等于16*(n+1)。在不足16的整数倍的情况下,假如原始数据长度等于16*n+m[其中m小于16],
	 *  除了NoPadding填充之外的任何方 式,加密数据长度都等于16*(n+1).
	 */
	static final String CIPHER_ALGORITHM_CBC_NoPadding = "AES/CBC/NoPadding"; 
	
	static SecretKey secretKey;
		
	public static void main(String[] args) throws Exception {
		method1("a*jal)k32J8czx囙国为国宽");
		method2("a*jal)k32J8czx囙国为国宽");
		method3("a*jal)k32J8czx囙国为国宽");
		
		method4("123456781234囙为国宽");// length = 16
		method4("12345678abcdefgh");// length = 16
		
	}
	
	/**
	 * 使用AES 算法 加密,默认模式  AES/ECB
	 */
	static void method1(String str) throws Exception {
		cipher = Cipher.getInstance(KEY_ALGORITHM);
		//KeyGenerator 生成aes算法密钥
		secretKey = KeyGenerator.getInstance(KEY_ALGORITHM).generateKey();
		System.out.println("密钥的长度为:" + secretKey.getEncoded().length);
		
		cipher.init(Cipher.ENCRYPT_MODE, secretKey);//使用加密模式初始化 密钥
		byte[] encrypt = cipher.doFinal(str.getBytes()); //按单部分操作加密或解密数据,或者结束一个多部分操作。
		
		System.out.println("method1-加密:" + Arrays.toString(encrypt));
		cipher.init(Cipher.DECRYPT_MODE, secretKey);//使用解密模式初始化 密钥
		byte[] decrypt = cipher.doFinal(encrypt);
		System.out.println("method1-解密后:" + new String(decrypt));
		
	}
	
	/**
	 * 使用AES 算法 加密,默认模式 AES/ECB/PKCS5Padding
	 */
	static void method2(String str) throws Exception {
		cipher = Cipher.getInstance(CIPHER_ALGORITHM_ECB);
		//KeyGenerator 生成aes算法密钥
		secretKey = KeyGenerator.getInstance(KEY_ALGORITHM).generateKey();
		System.out.println("密钥的长度为:" + secretKey.getEncoded().length);
		
		cipher.init(Cipher.ENCRYPT_MODE, secretKey);//使用加密模式初始化 密钥
		byte[] encrypt = cipher.doFinal(str.getBytes()); //按单部分操作加密或解密数据,或者结束一个多部分操作。
		
		System.out.println("method2-加密:" + Arrays.toString(encrypt));
		cipher.init(Cipher.DECRYPT_MODE, secretKey);//使用解密模式初始化 密钥
		byte[] decrypt = cipher.doFinal(encrypt);
		System.out.println("method2-解密后:" + new String(decrypt));
		
	}
	
	static byte[] getIV() {
		String iv = "1234567812345678"; //IV length: must be 16 bytes long
		return iv.getBytes();
	}
	
	/**
	 * 使用AES 算法 加密,默认模式 AES/CBC/PKCS5Padding
	 */
	static void method3(String str) throws Exception {
		cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC);
		//KeyGenerator 生成aes算法密钥
		secretKey = KeyGenerator.getInstance(KEY_ALGORITHM).generateKey();
		System.out.println("密钥的长度为:" + secretKey.getEncoded().length);
		
		cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(getIV()));//使用加密模式初始化 密钥
		byte[] encrypt = cipher.doFinal(str.getBytes()); //按单部分操作加密或解密数据,或者结束一个多部分操作。
		
		System.out.println("method3-加密:" + Arrays.toString(encrypt));
		cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(getIV()));//使用解密模式初始化 密钥
		byte[] decrypt = cipher.doFinal(encrypt);
		System.out.println("method3-解密后:" + new String(decrypt));
		
	}
	
	/**
	 * 使用AES 算法 加密,默认模式 AES/CBC/NoPadding  参见上面对于这种mode的数据限制
	 */
	static void method4(String str) throws Exception {
		cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC_NoPadding);
		//KeyGenerator 生成aes算法密钥
		secretKey = KeyGenerator.getInstance(KEY_ALGORITHM).generateKey();
		System.out.println("密钥的长度为:" + secretKey.getEncoded().length);
		
		cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(getIV()));//使用加密模式初始化 密钥
		byte[] encrypt = cipher.doFinal(str.getBytes(), 0, str.length()); //按单部分操作加密或解密数据,或者结束一个多部分操作。
		
		System.out.println("method4-加密:" + Arrays.toString(encrypt));
		cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(getIV()));//使用解密模式初始化 密钥
		byte[] decrypt = cipher.doFinal(encrypt);
		
		System.out.println("method4-解密后:" + new String(decrypt));
		
	}
	
}

分享到:
评论

相关推荐

    Java实现的对称加密算法AES定义与用法详解

    "Java实现的对称加密算法AES定义与用法详解" 对称加密算法AES是当前使用最多的加密算法之一,其主要特点是高级的、安全的、快速的和灵活的。下面我们将详细介绍Java实现的对称加密算法AES的定义、特点、用法及使用...

    JAVA实现AES加密算法代码.doc

    JAVA 实现 AES 加密算法代码 JAVA 实现 AES 加密算法代码是指使用 JAVA 语言来实现高级加密标准(Advanced Encryption Standard,AES)的加密算法。AES 已经变成目前对称加密中最流行算法之一,能够使用 128、192 ...

    AES加密算法(java)实现

    AES高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。

    java加密算法及常用知识学习杂记

    java加密算法AES\DES\RSA示例及常用知识学习杂记

    JAVA 加密算法(很好的算法,经典摘要)

    Java加密算法是信息安全领域中的重要组成部分,用于保护数据的隐私性和完整性。在Java平台上,有多种内置的加密库,如Java Cryptography Extension (JCE) 和 Java Cryptography Architecture (JCA),它们为开发者...

    Java实现AES加密算法

    Java实现AES加密算法Java实现AES加密算法

    AES加密算法的JAVA实现

    AES加密算法的JAVA实现(只有加密)

    Java 加密解密之对称加密算法AES.docx

    Java 加密解密之对称加密算法AES.docx

    java加密算法(aes+des+pboc3des+pbocdes等)

    java加密算法(aes+des+pboc3des+pbocdes等)

    java实现的AES加密算法完整实例

    AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它基于块加密,使用相同的密钥进行加密和解密。在Java中,AES加密通常通过Java Cryptography Extension (JCE)库来实现。以下是对给定的`AESCrypt...

    Java加密算法(源代码)

    Java加密算法是信息安全领域的重要组成部分,它涉及到数据的保护、隐私的维护以及网络通信的安全。在Java中,我们可以使用多种加密技术来实现数据的加密和解密,包括对称加密、非对称加密以及数字签名等。下面将详细...

    Java 加密解密之对称加密算法AES.pdf

    本文主要关注的是Java中的对称加密算法——AES(Advanced Encryption Standard),它是现代密码学中的一个关键标准,用于替换旧的DES算法。AES是由比利时密码学家Joan Daemen和Vincent Rijmen设计的Rijndael加密法,...

    可互操作的Java和JavaScript AES/128/192/256加密算法代码

    本主题主要关注的是如何在Java和JavaScript之间实现可互操作的AES(Advanced Encryption Standard)加密算法,这涉及到128、192和256位的密钥长度。AES是一种广泛应用的块密码,以其高效性和安全性著称,广泛用于...

    java 加密算法及原理.jar

    Java加密算法及原理是信息安全领域中的重要组成部分,用于保护数据的隐私性和完整性。在Java中,我们可以使用多种加密算法来实现数据的安全传输和存储。以下将详细介绍几种常见的Java加密算法及其工作原理。 1. **...

    AES.rar_AES_AES加密 java_AES算法_aes java_java aes

    AES算法的实现过程,实现了AES的加密和解密过程

    JAVA AES 加密算法

    JAVA AES 加密算法 javax.crypto.Cipher AES/ECB/PKCS5Padding

    VB6-AES加密算法源码.rar

    VB6-AES加密算法源码,无错,可直接运行。密钥长度支持128 Bit,192 Bit,256 Bit。支持字符串加密和文件加密。

    Java实现AES加密和解密算法

    本文就简单介绍如何通过JAVA实现AES加密: /** * 测试AES加密和解密 * @param args */ public static void main(String[] args) { /**数据初始化**/ String content = "http://www.mbaike.net"; String...

    Java版AES加密算法,亲测可用

    Java版AES加密算法,亲测可用

Global site tag (gtag.js) - Google Analytics