import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /*** * AES加密解密算法 * @author Qfh * 地址:http://blog.csdn.net/hbcui1984/article/details/5201247 */ public class AESUtil { public static String AesKey = "duanRon!@"; //秘钥 /** * 加密 * * @param content 需要加密的内容 * @param password 加密密码 * @return */ public static byte[] encrypt(String content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(password.getBytes())); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES");// 创建密码器 byte[] byteContent = content.getBytes("utf-8"); cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化 byte[] result = cipher.doFinal(byteContent); return result; // 加密 } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return null; } /**解密 * @param content 待解密内容 * @param password 解密密钥 * @return */ public static byte[] decrypt(byte[] content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(password.getBytes())); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES");// 创建密码器 cipher.init(Cipher.DECRYPT_MODE, key);// 初始化 byte[] result = cipher.doFinal(content); return result; // 加密 } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { String content = "小明学会了123456,但是他喜欢abcdeef,可是!@######未知"; String password = "duanRon!@"; //加密 System.out.println("加密前:" + content); byte[] encryptResult = encrypt(content, password); System.out.println("密文:" + new String(encryptResult)); //解密 byte[] decryptResult = decrypt(encryptResult,password); System.out.println("解密后:" + new String(decryptResult)); } /**将二进制转换成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; } /** * 加密后返回16进制数据 * @param temp * @return */ public static String encode(String temp){ byte[] tempByte = AESUtil.encrypt(temp,AESUtil.AesKey); //加密 temp = AESUtil.parseByte2HexStr(tempByte); //将二进制转换成16进制 return temp; } /** * 解密返回UTF-8字符串 * @param temp * @return */ public static String decode(String temp){ byte[] tempByte = AESUtil.parseHexStr2Byte(temp); //将16进制转换为二进制 tempByte = AESUtil.decrypt(tempByte,AESUtil.AesKey); //解密 try { temp = new String(tempByte,"UTF-8"); }catch(UnsupportedEncodingException e) { e.printStackTrace(); } return temp; } }
相关推荐
由于ASE算法是跨平台的,因此在Java和.NET之间进行加解密时,关键在于确保双方使用相同的密钥和算法参数。在实际应用中,可以通过安全的方式(如HTTPS)交换密钥,并在两端都使用相同的密钥进行加解密。 五、双语...
在本案例中,我们关注的是C语言实现的CMAC算法,特别地是基于AES的CMAC实现。 CMAC算法的核心思想是通过块密码的运算产生一个固定长度的认证标签,这个标签与原始消息相关联,并且只有拥有正确密钥的人才能生成或...
本文将深入探讨两种重要的加密算法——AES(高级加密标准)和ECC(椭圆曲线密码学),以及它们在Java环境下的实现。 **AES(高级加密标准)** AES,全称为Advanced Encryption Standard,是一种广泛使用的对称加密...
通过使用Java自带的加密库,可以方便快捷地实现AES算法。需要注意的是,密钥的长度必须符合要求(本例中为128位),并且在实际应用中应避免使用固定的密钥,建议采用更安全的方式生成随机密钥。此外,为了确保数据的...
Java实现AES/CBC/PKCS7Padding加解密的方法是指使用Java语言实现AES对称加密算法的加解密过程,其中包括了加密和解密两个步骤。AES是一种对称加密算法,使用同一个密钥进行加密和解密操作。 在Java中,AES加解密...
文件"js aes.txt"可能是JavaScript实现AES加密的示例代码,而"AES加密 – iOS与Java的同步实现"可能是介绍如何在iOS和Java之间实现同步加密的教程或代码示例。通过学习这些内容,开发者可以掌握如何在不同平台上实现...
在Android平台上,实现AES128加密和解密功能,可以使用Java Cryptography Extension (JCE)库中的 Cipher 类。首先需要设置好密钥和初始化向量(IV),然后选择对应的工作模式和填充方式初始化Cipher对象,进行加密或...
在编程实现ASE和RSA的加解密过程中,通常会使用已有的加密库,如Java的JCE(Java Cryptography Extension)或者Python的pycryptodome库。以下是一个简单的示例: 1. ASE加密: ```java import javax.crypto.Cipher;...
在Java编程语言中,AES(Advanced Encryption Standard)是一种广泛应用的对称加密算法,用于保护数据的安全性。在处理加密过程中,可能会遇到“非法参数”异常,这通常是因为输入数据长度不符合AES加密的要求。AES...
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在Java和Android平台上的数据加密和解密。这个压缩包文件可能包含了用于在Java和Android之间进行RSA加解密操作的代码示例或者库文件。以下是...
AES在各种编程语言中都有实现,包括Objective-C、C#、Java和Android。这些语言的通用AES加密版本允许开发者在不同的平台上实现一致的安全策略。 在Objective-C中,AES加密通常使用CommonCrypto库来实现。这个库提供...
在Java中,AES加密通常使用Java Cryptography Extension (JCE) 库来实现。JCE提供了一系列接口和类,如`Cipher`,`SecretKeySpec`和`AlgorithmParameterSpec`,用于实现不同加密算法和模式。以下是一些关于AES ECB...
但是,我们可以推测这个项目可能是一个初级到中级的Java编程练习,涉及基础的Java语法、面向对象编程概念、异常处理、数据结构或者算法等。 从【标签】"Java"来看,我们可以聚焦于Java语言的相关知识点: 1. **...
使用"Sybase ASE ODBC驱动 16.0.0.2",开发者可以构建基于ODBC的应用程序,实现与Sybase ASE数据库的无缝连接,无论是在数据迁移、报表生成、数据分析还是数据仓库项目中,都能发挥其高效、稳定的优势。
AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,因其高效性和安全性而备受青睐。本篇文章将深入探讨如何使用AES算法来对本地音频文件进行加解密操作。 首先,理解AES算法的基本原理。AES是一种...
Sybase ASE的查询处理器采用了先进的优化算法,能够智能地选择最佳查询计划,提高查询效率。 ##### 3.7 分布式事务 支持跨多个数据库服务器的分布式事务处理,确保数据一致性。 ##### 3.8 事务处理 提供了强大的...
本项目"java加密解密文件"显然涉及到使用Java语言实现对文件进行加解密的程序。在这个过程中,通常会涉及到多种加密算法,如ASE(Advanced Encryption Standard)和MD5(Message-Digest Algorithm 5)。接下来,我们...
标题中的"AES.rar"指的是一个...总之,这个压缩包可能是一个学习和研究AES加密技术的资源,包括了使用Java实现AES的代码,可能还包含了加密实例,适合于理解AES的工作原理以及如何在实际项目中应用这一强大的加密算法。
AES 是一种使用安全码进行信息加密的标准。 它支持 128 位、192 位和 256 位...加密算法的实现在 ElAES.pas 单元中。 本人将其加密方法封装在 AES.pas 单元中, 只需要调用两个标准函数就可以完成字符串的加密和解密。
- Sybase ASE 12.5 通过智能缓存管理算法提高了内存利用率,减少了磁盘 I/O 操作次数,加快了数据读取速度。 - 新增了压缩功能,可以有效减少存储空间占用,并降低备份和恢复操作所需的时间。 8. **多租户支持** ...