写道
此次加密基于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文件引入项目,即可利用其提供的功能,加强数据的安全保护。
在描述中提到,这个demo包含了不同平台的实现,包括Java、Android、iOS和.NET,这表明这是一个跨平台的加密解决方案。 AES加密的过程主要包括几个关键步骤: 1. **密钥生成**:AES支持128位、192位和256位三种密钥...
总的来说,这个压缩包提供的解决方案可以帮助开发者在uniapp小程序中实现前后端AES加密解密,确保数据在传输过程中的安全性。这不仅适用于小程序,也可以应用于其他uniapp开发的H5、Android和iOS应用。通过合理使用...
当在Java环境中使用AES加密时遇到 `java.security.InvalidKeyException: Illegal key size or default parameter` 这个异常,通常意味着密钥的长度超过了Java安全策略所允许的最大值。具体来说: - **非法密钥大小...
因为美国法律限制,JAVA默认支持AES 128 Bit 的key, 如果你计划使用 192 Bit 或者 256 Bit key, java complier 会抛出 Illegal key size Exception 解决办法也很简单: 将下面链接中的jar包下载下来,替换jdk 与jre...
本项目提供了JavaScript前端和Java后端的AES加密解决方案,确保数据在客户端与服务器间的安全传输。 前端部分,JavaScript的实现通常依赖于如CryptoJS这样的库,它提供了AES加密的API接口。开发者可以通过这个库,...
这个标题"AES加密For XE 5"表明了这是一个针对Delphi XE5开发环境的AES加密解决方案。 描述中的“xe2-5下没问题”意味着该加密库在Delphi XE2版本到XE5版本之间已经过测试,并且在这些版本下能够正常工作。然而,...
本资源提供了一个基于JavaScript的AES加密解决方案,适用于前端应用。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,以其高效和安全性著称。 首先,我们有两个JavaScript...
总的来说,这个压缩包提供了一种跨平台的解决方案,帮助开发者在C++和Java环境中实现AES加密,同时保证了加密结果的一致性。这对于多语言开发环境的数据安全传输至关重要。通过学习和使用这些源码,开发者不仅可以...
总的来说,"Jar包保护加密解决方案"是一个涵盖开发、部署和运行全过程的技术实践,涉及到Java编程、加密算法、混淆技术、自定义Class Loader以及JVM的深入理解和应用。通过综合运用这些技术,可以有效提高jar包的...
总之,这套资源提供了一个完整的AES加密解密解决方案,适用于Java和JavaScript环境,对于开发需要数据安全传输的Web应用非常有用。开发者可以通过学习和实践,理解并掌握AES的工作原理和应用方法,提升数据安全防护...
综合来看,这个压缩包提供的是一套完整的AES文件加密解决方案,包括自动化脚本、升级机制以及加密核心。用户可以通过这些工具来保护他们的文件和升级包,确保数据在传输和存储过程中的安全。为了使用这些工具,用户...
总的来说,这些Java文件提供了一套完整的AES加密解决方案,包括密钥管理、数据加解密、编码处理以及不同工作模式的支持。开发者可以根据实际需求,调用这些类和方法,轻松实现AES加密功能,确保数据安全传输。在使用...
### AES加密技术及其Java与iOS实现方案 #### 一、AES加密概述 AES(Advanced Encryption Standard,高级加密标准)是一种广泛应用于数据加密的安全标准。它取代了早期的DES(Data Encryption Standard,数据加密...
本压缩包文件"jdk8解除aes加密限制.zip"很可能是针对这个问题提供了解决方案。 在Java中,加密相关的限制主要源于美国出口法规,这些法规限制了某些高强度加密算法的使用,以防止技术非法出口。因此,Java ...
在这种情况下,解决方案可能包括引入额外的.jar文件,这些文件提供了JDK默认未包含的AES加密算法或扩展。 描述中提到的"根据readme.txt进行操作"表明了解决这个问题的关键步骤。readme.txt通常是一个文本文件,包含...
Android RSA AES加密库是一种结合了非对称加密RSA和对称加密AES的安全解决方案。这篇文章将详细讲解这两种加密算法以及它们在Android JNI(Java Native Interface)环境下的实现。 **1. RSA加密算法** RSA是一种非...
总结,通过C++的Cryptopp库封装AES加密,可以为Android和Java应用提供高性能的数据加密解决方案。在Android上,可以利用JNI将C++代码打包成`aar`库,而在Java环境中,可以通过JNI接口调用C++的加密函数。这种跨平台...
2. **使用AES加密数据**:使用Cipher类和生成的AES密钥对数据进行加密。 3. **使用RSA加密AES密钥**:为了保护AES密钥的安全,还需要使用RSA对其进行加密。这里可以使用KeyPairGenerator类生成RSA密钥对,然后使用...
GWKEncryp可能是一个加密库或者工具,它可能提供了跨平台的AES加密解决方案,简化了在不同环境下的集成工作。TestHeshan可能是测试代码或工具,用于验证加密和解密的正确性。在实际应用中,编写单元测试和集成测试至...