AES算法的Java实现,直接对String操作
来源:互联网 发布:中国跨境电子商务数据 编辑:程序博客网 时间:2024/05/28 09:33
问题:
今天用Java写了一下AES算法,该算法完全对String进行操作,不需要在工具类之外对byte[]和String进行互转。大大方便了使用。
代码及注释:
AESUtil.java
package aes;import java.security.Key; import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;public class AESUtil {/** * 密钥算法 */ public static final String KEY_ALGORITHM = "AES"; /** * 加密/解密算法 /工作模式 /填充方式 */ public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"; /** * 转换密钥 * @param key 待密钥 * @return 转换后的密钥 * @throws Exception 抛出异常 */ private static Key toKey(byte[] key) throws Exception{ //实例化AES密钥材料 SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM); return secretKey; } /** * AES解密 * @param data 待解密数据 * @param key 密钥 * @return 明文 * @throws Exception 抛出异常 */ private static byte[] decrypy(byte[] data, byte[] key) throws Exception{ //还原密钥 Key k = toKey(key); Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); //初始化,设置解密模式 cipher.init(Cipher.DECRYPT_MODE, k); return cipher.doFinal(data); } /** * AES解密 * @param data 密文 * @param aesKey AES密钥 * @return 明文 * @throws Exception 抛出异常 */ public static String decrypt(String data, String aesKey) throws Exception{ byte[] data_byets = Base64.decodeBase64(data); byte[] aesKey_bytes = Base64.decodeBase64(aesKey); byte[] result = decrypy(data_byets, aesKey_bytes); return new String(result); //return "hahaha"; } /** * AES加密 * @param data 待加密数据 * @param key 密钥 * @return 密文 * @throws Exception 抛出异常 */ private static byte[] encrypy(byte[] data, byte[] key) throws Exception{ Key k = toKey(key); Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); //初始化,设置解密模式 cipher.init(Cipher.ENCRYPT_MODE, k); return cipher.doFinal(data); } /** * AES加密 * @param data 待加密数据 * @param aesKey AES密钥 * @return 密文 * @throws Exception 抛出异常 */ public static String encrypt(String data, String aesKey) throws Exception{ byte[] data_bytes = data.getBytes(); byte[] aesKey_bytes = Base64.decodeBase64(aesKey); byte[] result = encrypy(data_bytes, aesKey_bytes); return Base64.encodeBase64String(result); } /** * 生成AES密钥 * @return AES密钥 * @throws Exception 抛出异常 */ public static String initKey() throws Exception{ //实例化 KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM); //设置密钥长度 keyGenerator.init(256); //生成密钥 SecretKey secretKey = keyGenerator.generateKey(); //获得密钥的二进制编码形式 return Base64.encodeBase64String(secretKey.getEncoded()); }}
package aes;public class AES {public static void main(String[] args) throws Exception{// TODO Auto-generated method stub String data = "中华人民共和国"; System.out.println("原文:\n" + data); String aesKey = AESUtil.initKey(); System.out.println("AES密钥:\n" + aesKey); String encrypyStr = AESUtil.encrypt(data, aesKey); System.out.println("密文:\n" + encrypyStr); String decryptStr = AESUtil.decrypt(encrypyStr, aesKey); System.out.println("明文:\n" + decryptStr);}}
运行结果:
0 0
- AES算法的Java实现,直接对String操作
- 对称加密算法AES------使用AES算法对文件进行加密/解密的操作(JAVA)
- AES算法的JAVA实现
- 【JAVA】AES算法的java实现
- java实现AES算法
- AES算法 Java实现
- 使用AES算法对文件进行加密/解密的操作(JAVA)
- AES加密解密算法的Java实现
- AES算法java实现浅析
- AES算法加密java实现
- AES算法Java实现浅析
- AES的Java实现
- AES的Java实现
- AES基于java的算法的具体实现
- AES密码算法的实现
- AES密码算法的实现
- JAVA实现AES的加密和解密算法
- Java 中对String的操作
- 反向代理-ngrok for wechat
- struts2面试题
- vmtouch命令
- Leetcode Week11
- Java概念性问题5
- AES算法的Java实现,直接对String操作
- windows下安装yarn出现python问题解决命令
- LSApplicationWorkspace
- JVM(十一) 运行时包
- Phpstorm索引文件路径配置 左侧目录背景色配置
- Python3.6实现PostgreSql数据表备份与恢复
- etc/fstab 文件详解
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
- QT开源绘图项目总结与整理