详见代码中注释:
package com.support; import java.io.UnsupportedEncodingException; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.lang.StringUtils; /** * AES对称加密 * * @author Sun Jiangwei * */ public class AESEncryptor { /** 算法名称 */ private static final String KEY_ALGORITHM = "AES"; /** 算法名称/加密模式/填充方式 */ private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"; /** UC的密钥 */ public static final String KEY_FOR_UC = "dw2e3F30E7BA8@3C"; /** * 生成随机密钥<br/> * 安全性较高,但密钥需要保存 * * @param key * @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ @Deprecated public static Key toRandomKey(String key) throws NoSuchAlgorithmException, UnsupportedEncodingException { // 返回生成指定算法的秘密密钥的 KeyGenerator对象 KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM); // 初始化此密钥生成器,使其具有确定的密钥大小(AES 要求密钥长度为 128) kgen.init(128, new SecureRandom(key.getBytes("UTF-8"))); // 生成一个密钥 SecretKey secretKey = kgen.generateKey(); // 构造密钥 byte[] enCodeFormat = secretKey.getEncoded(); return new SecretKeySpec(enCodeFormat, KEY_ALGORITHM); } /** * 生成一个固定密钥 * * @param password 长度必须是16的倍数 * @return * @throws UnsupportedEncodingException */ private static Key toKey(String password) throws UnsupportedEncodingException { return new SecretKeySpec(password.getBytes("UTF-8"), KEY_ALGORITHM); } /** * 将二进制转换成十六进制 * * @param buf * @return */ private 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(); } /** * 将十六进制转换为二进制 * * @param hexStr * @return */ private 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 * @throws Exception */ public static String encrypt(String content, String password) { if (StringUtils.isBlank(content)) { return ""; } try { // 生成密钥 Key key = toKey(password); // 将String转换为二进制 byte[] byteContent = content.getBytes("UTF-8"); // 创建密码器 Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM); // 初始化为加密模式 cipher.init(Cipher.ENCRYPT_MODE, key); // 执行加密加密 byte[] result = cipher.doFinal(byteContent); return parseByte2HexStr(result); } catch (Exception e) { e.printStackTrace(); } return ""; } /** * 解密 * * @param content * 待解密内容 * @param password * 解密密钥 * @return * @throws Exception */ public static String decrypt(String content, String password) { if (StringUtils.isBlank(content)) { return ""; } try { // 将十六进制转换为二进制 byte[] contentHex = parseHexStr2Byte(content); // 生成密钥 Key key = toKey(password); // 创建密码器 Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM); // 初始化解码模式 cipher.init(Cipher.DECRYPT_MODE, key); // 解密 byte[] result = cipher.doFinal(contentHex); return new String(result, "UTF-8"); } catch (Exception e) { e.printStackTrace(); } return ""; } public static void main(String[] args) throws Exception { String content = "TGT-1-XDm5ultp4XEgb69cDebwRFWKPwEeAF300DF0odckQniqHlJN"; // 加密 System.out.println("加密前:" + content); String encryptResultStr = encrypt(content, KEY_FOR_UC); System.out.println("加密后:" + encryptResultStr); // 解密 System.out.println("解密后:" + decrypt(encryptResultStr, KEY_FOR_UC)); } }
针对方法toRandomKey说明如下:
(1)本例encrypt、decrypt方法中的Key key = toKey(password);,不能替换为Key key=toRandomKey(password),因为不能保证两次调用产生相同的Key(即使在main方法测试时通过的)。
(2)如果想使用随机密钥,修改encrypt、decrypt的参数String password为Key key即可。调用encrypt、decrypt的业务确保两次传入的Key相同。
相关推荐
"Java实现的对称加密算法AES定义与用法详解" 对称加密算法AES是当前使用最多的加密算法之一,其主要特点是高级的、安全的、快速的和灵活的。下面我们将详细介绍Java实现的对称加密算法AES的定义、特点、用法及使用...
JAVA 实现 AES 加密算法代码 JAVA 实现 AES 加密算法代码是指使用 JAVA 语言来实现高级加密标准(Advanced Encryption Standard,AES)的加密算法。AES 已经变成目前对称加密中最流行算法之一,能够使用 128、192 ...
因此,通常会结合密钥管理策略,如使用密钥派生函数(KDFs)或密钥协商协议,以及使用非对称加密(如RSA)来安全地交换AES密钥。 总之,Java中的AES加密和解密涉及到密钥生成、密码器的使用以及数据的转换。在实现...
AES高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。
对称加密算法包括了多种算法,本文主要介绍DES、3DES和AES这三种常见的对称加密算法,并对它们进行Java实现的总结。 首先,对称加密算法的一个关键优势在于其算法公开、计算量小、加密速度快、加密效率高,但它们也...
Java AES对称加密解密算法
AES,全称Advanced Encryption Standard,即高级加密标准,是一种广泛应用于现代计算机安全领域的对称加密算法。它在2001年由NIST(美国国家标准与技术研究所)采纳为新的联邦信息处理标准(FIPS),取代了之前的DES...
RSA是一种非对称加密算法,而AES是一种对称加密算法,它们各有优势,结合使用可以提供更强大的安全保障。 **RSA算法** RSA(Rivest-Shamir-Adleman)是1977年由Ron Rivest、Adi Shamir和Leonard Adleman提出的非...
AES,全称为“Advanced Encryption Standard”,即高级加密标准,是目前广泛使用的对称加密算法。它在2001年由NIST(美国国家标准与技术研究所)正式采纳,取代了之前的DES(数据加密标准)成为新的标准。AES具有较...
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
RSA是一种非对称加密算法,而AES是一种对称加密算法。两者的结合利用了它们各自的优势,为数据加密提供了一种安全而高效的方法。 RSA(Rivest-Shamir-Adleman)算法基于数论中的大数因子分解难题,它有两个密钥:...
AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它基于块加密,使用相同的密钥进行加密和解密。在Java中,AES加密通常通过Java Cryptography Extension (JCE)库来实现。以下是对给定的`AESCrypt...
DES、AES对称加密算法,之前从网上找的,但是在MAC上运行发现每次加密出来的结果都不一样,后来查了一些博客,最后确认是SecureRandom的随机算法问题,需要设置setSeed.
在Java编程环境中,AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它以其高效性和安全性而被广泛应用。本文将详细介绍如何使用Java实现AES的加密和解密过程,特别是针对16位长度的秘钥,并解决...
在 Java 中实现 AES 可逆加密算法是一个非常实用的技术, AES(Advanced Encryption Standard)是一种对称加密算法,使用同一个密钥进行加密和解密。下面我们将详细介绍 Java 实现 AES 可逆加密算法的步骤和相关知识...
AES,全称Advanced Encryption Standard,即高级加密标准,是一种广泛应用于现代网络安全的对称加密算法。它是基于块密码,每个块大小为128位,使用128、192或256位的密钥进行加密。AES在Java中的实现通常包括加密和...
本资料包“对称加密算法分析及用Java实现.zip”包含了关于这一主题的详细内容,特别是如何使用Java编程语言来实现对称加密算法。 对称加密算法的核心特点是加密和解密使用相同的密钥,这简化了密钥管理,但也带来了...
AES是一种广泛使用的对称加密算法,为数据提供高强度的安全保护。该源码经过验证,无错误,可以直接在VB6环境下运行,这对于开发者来说是一个宝贵的资源,可以快速集成到自己的项目中。 AES加密算法最初由比利时...
**AES对称加密** AES(Advanced Encryption Standard),即高级加密标准,是目前广泛使用的对称加密算法之一。它以其高效、安全的特点,在数据保护、网络安全等领域有着广泛应用。AES的加密过程基于替换和置换操作...