`
流浪鱼
  • 浏览: 1693868 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AES加密使用

    博客分类:
  • java
 
阅读更多

AES加密使用

import java.security.SecureRandom;

import javax.crypto.*;
import javax.crypto.spec.*;

public class AesCrypto {
	
	/**将二进制转换成16进制
	* @param buf
	* @return
	*/
	public static String parseByte2HexStr(byte buf[]) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < buf.length; i++) {
			String hex = Integer.toHexString(buf[i] & 0xFF);
			if (hex.length() == 1) {
				hex = '0' + hex;
			}
			sb.append(hex.toUpperCase());
		}
		return sb.toString();
	}


	/**将16进制转换为二进制
	* @param hexStr
	* @return
	*/
	public static byte[] parseHexStr2Byte(String hexStr) {
		if (hexStr.length() < 1)return null;
		byte[] result = new byte[hexStr.length()/2];
		for (int i = 0;i< hexStr.length()/2; i++) {
			int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
			int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
			result[i] = (byte) (high * 16 + low);
		}
		return result;
	}	

	
	/** 
     * 加密 
     * @param content 需要加密的内容 
     * @param password  加密密码 
     * @return String 十进制数字字符串
     */  
    public static String encrypt(String content, String password) {
    	String result = null;
    	try {
    		// Get the KeyGenerator
    		KeyGenerator kgen = KeyGenerator.getInstance("AES");
    		//kgen.init(128); // 192 and 256 bits may not be available
    		kgen.init(128, new SecureRandom(password.getBytes()));
    		
    		// Generate the secret key specs.
    		SecretKey skey = kgen.generateKey();
    		byte[] raw = skey.getEncoded();
    		
    		SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    		
    		// Instantiate the cipher(创建密码器)
    		Cipher cipher = Cipher.getInstance("AES");
    		
    		cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    		byte[] encrypted = cipher.doFinal(content.getBytes());
    		
    		result =parseByte2HexStr(encrypted);
    		
    		//System.out.println("加密的结果:" + result);
    		
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("加密:出现错误!!!");
		}
    	
		return result;
    }
    
    
    /**解密 
     * @param content  待解密内容 
     * @param password 解密密钥 
     * @return String 字符串
     */  
    public static String decrypt(String content, String password) {
    	String result = null;
    	try {
    		// Get the KeyGenerator
    		KeyGenerator kgen = KeyGenerator.getInstance("AES");
    		//kgen.init(128); // 192 and 256 bits may not be available
    		kgen.init(128, new SecureRandom(password.getBytes()));
    		
    		// Generate the secret key specs.
    		SecretKey skey = kgen.generateKey();
    		byte[] raw = skey.getEncoded();
    		
    		SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    		
    		// Instantiate the cipher(创建密码器)
    		Cipher cipher = Cipher.getInstance("AES");
    		
    		cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    		
    		byte[] encrypted = cipher.doFinal(parseHexStr2Byte(content));
    		
    		result =new String(encrypted);    		
    		//System.out.println("解密结果:" + result);
    		
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("解密:出现错误!!!");
		}
		return result;
    }
    
	public static void main(String[] args) throws Exception {

		String content ="TEST";
		String password ="123455";
		
		System.out.println("====================================");
		System.out.println("原文:" + content);
		System.out.println("密匙:" + password);
		
		System.out.println("====================================");
		String en =AesCrypto.encrypt(content, password);
		System.out.println("加密:" + en);
	
		System.out.println("====================================");
		String de =AesCrypto.decrypt(en, "123455");
		System.out.println("解密:" + de);
		
		//System.out.println("原文长度: " + content.length());
		

		
		
	}
	
    

}

 

 

 

分享到:
评论

相关推荐

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

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

    java使用Hex编码解码实现Aes加密解密功能示例

    总结来说,这个Java示例展示了如何使用Hex编码和解码配合AES加密算法进行数据安全保护。在实际应用中,为了提高安全性,通常会采用更复杂的加密模式(如CBC或CFB),并使用随机生成的密钥,而不是固定或硬编码的密钥...

    c AES, c++ AES, java AES, 互通, 加密解密

    Java中,虽然提供了BigInteger类来处理大整数,但AES加密解密通常使用Java的javax.crypto包,其中的Cipher类可以直接处理。然而,为了实现不依赖外部库的目标,我们需要手动实现AES的全部算法,这意味着需要将Cipher...

    Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes

    Java中的AES加密同样有多种工作模式可供选择,并且JCE也提供了易于使用的API来实现这些操作。为了实现Delphi和Java之间的兼容性,开发者需要确保两者的加密参数(如密钥、初始向量IV、工作模式等)一致,并且遵循...

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

    本篇将深入探讨如何使用Java实现AES加密,并解决过长数据导致的非法异常。 首先,我们来看AES加密的两种主要方式:基于字符串和基于字节数组。这两种方式都需要一个密钥,该密钥必须是128位、192位或256位,取决于...

    aes加密算法delphi

    这些函数的正确使用对于确保AES加密过程的有效性和安全性至关重要。在实际开发中,还需要结合具体的AES加密库(如BouncyCastle等)来完成完整的加密解密流程。 此外,在编写这类函数时还需注意代码的健壮性,例如对...

    QT 实现AES 加密算法

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

    AES加密软件 AES加密软件

    1. 文件加密:用户可以使用AES加密软件对单个文件或整个文件夹进行加密,确保在未经授权的情况下无法访问这些数据。 2. 文件解密:加密后的文件可以通过软件进行解密,恢复为原始可读状态。 3. 快捷加密:软件可能...

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

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

    新建 WinRAR 压缩文件.rar_AES_AES 加密_STM32 aes加密

    标题 "新建 WinRAR 压缩文件.rar_AES_AES 加密_STM32 aes加密" 指涉了一个关于使用AES(高级加密标准)加密技术的项目,特别提到了它与STM32微控制器的结合。这个压缩包包含了实现AES加密的源代码文件,如`aes.c`和...

    不用cryptoJs的aes加密解密

    通常,开发者会使用像cryptoJs这样的库来实现AES加密和解密功能,因为它提供了方便的API。然而,在某些情况下,我们可能需要不依赖任何特定库来实现AES,而是直接使用JavaScript原生功能或自定义代码。这个场景描述...

    STM32F103程序AES加密.zip_STM32 AES加密_aes stm32f103_stm32f103 硬件aes_

    在"STM32F103程序AES加密.zip"这个压缩包中,包含了STM32F103使用AES加密的示例代码。通过分析这个例程,我们可以学习如何配置硬件AES模块,设置密钥,以及如何进行数据的加密和解密操作。以下是一些关键知识点: 1...

    AES加密算法Dll

    AES加密算法Dll是一个用于在项目中实现AES加密功能的动态链接库(Dll)文件。AES,全称为“高级加密标准”(Advanced Encryption Standard),是一种广泛应用于数据加密的标准算法,尤其在网络安全、数据保护和隐私...

    AES加密算法 Delphi7

    本篇文章将深入探讨AES加密算法的基础原理、在Delphi7中的实现以及如何使用ElAES.pas组件进行加密和解密操作。 AES算法基于块密码,它的工作原理是将明文数据分成固定大小的块(128位),然后通过一系列的混淆和...

    c++ AES加密.zip

    AES(Advanced Encryption Standard)是一种...综上所述,这个资源提供了C++环境下使用AES加密的实例,涵盖了从库的构建到实际应用的全过程,对于学习和理解AES加密技术以及在C++中如何实现和测试加密功能非常有价值。

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

    标题和描述中提到的“qt5AES加密”是指使用Qt5框架实现的AES(Advanced Encryption Standard)加密技术。AES是一种广泛使用的对称加密算法,以其高效和安全性著称。"ES加密/解密算法"可能是描述错误,通常指的是AES...

    VB6-AES加密算法源码.rar

    VB6虽然是一款较老的开发工具,但它仍然在许多遗留系统中得到使用,因此这个VB6-AES加密算法源码对于维护和升级这些系统非常有价值。开发者可以借此学习AES加密的基本原理和实现细节,也可以直接利用源码中的函数...

    Qt实现AES加密解密

    在提供的"AesDemo"压缩包中,很可能包含了一个使用Qt实现的AES加密解密的示例程序。这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战...

    AES加密BMP图片

    在VC中,可以使用开源库如Crypto++或者Microsoft的Cryptography API: Next Generation (CNG)来实现AES加密。 6. **保存加密结果**:将加密后的数据写入新的文件,通常这个文件是无法直接查看的,因为它是加密的。 ...

    AES加密的原理的说明报告,非常详细,利于了解和学习AES加密

    报告很详细,清晰的描述了AES的原理和优势,指出AES和其他加密的特点,对于密码学的人和想实现AES加密用代码实现的人很有帮助,我仔细的读过很多遍啦,不错!

Global site tag (gtag.js) - Google Analytics