`
wangking717
  • 浏览: 262487 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

JAVA AES加密解决方案

阅读更多
 写道
此次加密基于AES-128 CBC PKCS5填充模式。密钥为长度64的hex string,将其转为32-byte key,前8 bytes和后8 bytes组合为key,剩下中间的为IV。
如密钥:112b1ea14ae0ac4c081c26b4974b03f8c41d40cea3418eba6c0203404cb470bf
那么可划分为112b1ea14ae0ac4c |||| 081c26b4974b03f8c41d40cea3418eba ||| 6c0203404cb470bf
注:一个byte对应2个hex string

 

源代码:

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AESEncryptor {

	private static String AES_HEX = "112b1ea14ae0ac4c081c26b4974b03f8c41d40cea3418eba6c0203404cb470bf";
	private Cipher cipher;
	private IvParameterSpec dps;
	private SecretKeySpec skeySpec;
	
	public AESEncryptor() throws Exception{
		byte[] passkey = hex2Bin(AES_HEX);
		byte[] key = getAESKey(passkey);
		byte[] iv = getAESIV(passkey);
		dps = new IvParameterSpec(iv);
		skeySpec = new SecretKeySpec(key, "AES");
		cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
	}
	
	private byte[] getAESIV(byte[] keyRaw) throws Exception {	//获得32 byte数组中的一部分作为KEY
		byte[] iv = new byte[16];
		System.arraycopy(keyRaw, 8, iv, 0, 16);
		return iv;
	}

	private byte[] getAESKey(byte[] keyRaw) throws Exception {	//获得32 byte数组中的一部分作为KEY
		byte[] key = new byte[16];
		System.arraycopy(keyRaw, 0, key, 0, 8);
		System.arraycopy(keyRaw, 24, key, 8, 8);
		return key;
	}

	public String encrypt(String command) throws Exception {
		
		cipher.init(Cipher.ENCRYPT_MODE, skeySpec, dps);
		byte[] buf = cipher.doFinal(command.getBytes());

		return this.byte2hexString(buf);
	}

	public String decrypt(String sSrc) throws Exception {

		cipher.init(Cipher.DECRYPT_MODE, skeySpec, dps);
		return new String(cipher.doFinal(hex2Bin(sSrc)));

	}

	private byte[] hex2Bin(String src) {
		if (src.length() < 1)
			return null;
		byte[] encrypted = new byte[src.length() / 2];
		for (int i = 0; i < src.length() / 2; i++) {
			int high = Integer.parseInt(src.substring(i * 2, i * 2 + 1), 16);
			int low = Integer.parseInt(src.substring(i * 2 + 1, i * 2 + 2), 16);

			encrypted[i] = (byte) (high * 16 + low);
		}
		return encrypted;
	}

	private String byte2hexString(byte buf[]) {
		StringBuffer strbuf = new StringBuffer(buf.length * 2);
		int i;

		for (i = 0; i < buf.length; i++) {
			if (((int) buf[i] & 0xff) < 0x10)
				strbuf.append("0");

			strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
		}

		return strbuf.toString();
	}

	public static void main(String[] args) {
		AESEncryptor aes = null;
		try {
			aes = new AESEncryptor();
			String para = aes.encrypt("password=testpswd");
			System.out.println(para);
			String s = aes.decrypt("29694e1985a631fade0d92fca230f75f2724e6c7fc96d15cdcdef787012ad803");
			System.out.println(s);
			System.out.println(aes.encrypt("password=testpswd"));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}
 
分享到:
评论

相关推荐

    java AES 加密解密源码,集成了AWT 界面,源码直接打包成jar,可以运行

    总的来说,这个Java AES加密解密工具提供了一个实用的解决方案,简化了开发者的加密工作,同时通过AWT界面提高了易用性。开发者只需将这个jar文件引入项目,即可利用其提供的功能,加强数据的安全保护。

    简单AES加密demo

    在描述中提到,这个demo包含了不同平台的实现,包括Java、Android、iOS和.NET,这表明这是一个跨平台的加密解决方案。 AES加密的过程主要包括几个关键步骤: 1. **密钥生成**:AES支持128位、192位和256位三种密钥...

    uniapp 前后端AES加密解密.rar

    总的来说,这个压缩包提供的解决方案可以帮助开发者在uniapp小程序中实现前后端AES加密解密,确保数据在传输过程中的安全性。这不仅适用于小程序,也可以应用于其他uniapp开发的H5、Android和iOS应用。通过合理使用...

    AES加密时抛出java.security.InvalidKeyException: Illegal key size or default parameter

    当在Java环境中使用AES加密时遇到 `java.security.InvalidKeyException: Illegal key size or default parameter` 这个异常,通常意味着密钥的长度超过了Java安全策略所允许的最大值。具体来说: - **非法密钥大小...

    AES加密出现InvalidKeyException之Illegal key size解决方案

    因为美国法律限制,JAVA默认支持AES 128 Bit 的key, 如果你计划使用 192 Bit 或者 256 Bit key, java complier 会抛出 Illegal key size Exception 解决办法也很简单: 将下面链接中的jar包下载下来,替换jdk 与jre...

    AES加密(JS前端+Java后端).rar

    本项目提供了JavaScript前端和Java后端的AES加密解决方案,确保数据在客户端与服务器间的安全传输。 前端部分,JavaScript的实现通常依赖于如CryptoJS这样的库,它提供了AES加密的API接口。开发者可以通过这个库,...

    AES加密For XE 5

    这个标题"AES加密For XE 5"表明了这是一个针对Delphi XE5开发环境的AES加密解决方案。 描述中的“xe2-5下没问题”意味着该加密库在Delphi XE2版本到XE5版本之间已经过测试,并且在这些版本下能够正常工作。然而,...

    aes加密,c++源码,java源码,加密结果一致

    总的来说,这个压缩包提供了一种跨平台的解决方案,帮助开发者在C++和Java环境中实现AES加密,同时保证了加密结果的一致性。这对于多语言开发环境的数据安全传输至关重要。通过学习和使用这些源码,开发者不仅可以...

    aes加密js文件下载aes.js pad-zeropadding-min.js

    本资源提供了一个基于JavaScript的AES加密解决方案,适用于前端应用。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,以其高效和安全性著称。 首先,我们有两个JavaScript...

    Jar包保护加密解决方案

    总的来说,"Jar包保护加密解决方案"是一个涵盖开发、部署和运行全过程的技术实践,涉及到Java编程、加密算法、混淆技术、自定义Class Loader以及JVM的深入理解和应用。通过综合运用这些技术,可以有效提高jar包的...

    aes加密解密

    总之,这套资源提供了一个完整的AES加密解密解决方案,适用于Java和JavaScript环境,对于开发需要数据安全传输的Web应用非常有用。开发者可以通过学习和实践,理解并掌握AES的工作原理和应用方法,提升数据安全防护...

    jdk8解除aes加密限制.zip

    本压缩包文件"jdk8解除aes加密限制.zip"很可能是针对这个问题提供了解决方案。 在Java中,加密相关的限制主要源于美国出口法规,这些法规限制了某些高强度加密算法的使用,以防止技术非法出口。因此,Java ...

    AES文件加密 升级包加密脚本与程序

    综合来看,这个压缩包提供的是一套完整的AES文件加密解决方案,包括自动化脚本、升级机制以及加密核心。用户可以通过这些工具来保护他们的文件和升级包,确保数据在传输和存储过程中的安全。为了使用这些工具,用户...

    AES加密-开箱即用,已经封装好了.zip

    总的来说,这些Java文件提供了一套完整的AES加密解决方案,包括密钥管理、数据加解密、编码处理以及不同工作模式的支持。开发者可以根据实际需求,调用这些类和方法,轻松实现AES加密功能,确保数据安全传输。在使用...

    AES加密-Java与iOS的解决方案.docx

    ### AES加密技术及其Java与iOS实现方案 #### 一、AES加密概述 AES(Advanced Encryption Standard,高级加密标准)是一种广泛应用于数据加密的安全标准。它取代了早期的DES(Data Encryption Standard,数据加密...

    aes对称加密所需jar

    在这种情况下,解决方案可能包括引入额外的.jar文件,这些文件提供了JDK默认未包含的AES加密算法或扩展。 描述中提到的"根据readme.txt进行操作"表明了解决这个问题的关键步骤。readme.txt通常是一个文本文件,包含...

    Android RSA AES 加密库

    Android RSA AES加密库是一种结合了非对称加密RSA和对称加密AES的安全解决方案。这篇文章将详细讲解这两种加密算法以及它们在Android JNI(Java Native Interface)环境下的实现。 **1. RSA加密算法** RSA是一种非...

    用C++开源库cryptopp 封装的Aes对称加密

    总结,通过C++的Cryptopp库封装AES加密,可以为Android和Java应用提供高性能的数据加密解决方案。在Android上,可以利用JNI将C++代码打包成`aar`库,而在Java环境中,可以通过JNI接口调用C++的加密函数。这种跨平台...

    AES、RSA相结合的数据加密方案在Java中的实现

    2. **使用AES加密数据**:使用Cipher类和生成的AES密钥对数据进行加密。 3. **使用RSA加密AES密钥**:为了保护AES密钥的安全,还需要使用RSA对其进行加密。这里可以使用KeyPairGenerator类生成RSA密钥对,然后使用...

    AES加密 跨平台处理

    GWKEncryp可能是一个加密库或者工具,它可能提供了跨平台的AES加密解决方案,简化了在不同环境下的集成工作。TestHeshan可能是测试代码或工具,用于验证加密和解密的正确性。在实际应用中,编写单元测试和集成测试至...

Global site tag (gtag.js) - Google Analytics