AES加密,128-192-256,方案二 ゝ一纸荒年。 2022-08-18 03:02 164阅读 0赞 与方案一对比,方案二要简洁很多。 看代码: package com.xiao.aes.util; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Hex; /\*\* \* \* 美国软件出口限制,JDK默认使用的AES算法最高只能支持128位。如需要更高的支持需要从oracle官网下载更换JAVA\_HOME/jre/lib/ \* security目录下的: local\_policy.jar和US\_export\_policy.jar。<br/> \* 采用补码方式以及base64双重加密,依赖commons-codec-1.x.jar包中的base64加密 \* \* @author xiao \* \*/ public class AESUtil2 \{ /\*\* \* \*/ private static Cipher cipher; /\*\* \* 初始化向量 \*/ private static IvParameterSpec iv; static \{ try \{ byte\[\] vi = Hex.decodeHex("12345678123456781234567812345678" .toCharArray()); iv = new IvParameterSpec(vi); // "算法/模式/补码方式" cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); \} catch (NoSuchAlgorithmException e) \{ // TODO Auto-generated catch block e.printStackTrace(); \} catch (NoSuchPaddingException e) \{ // TODO Auto-generated catch block e.printStackTrace(); \} catch (DecoderException e) \{ // TODO Auto-generated catch block e.printStackTrace(); \} \} /\*\* \* 生成密钥 \* \* @param type \* AES长度 \* @return 密钥 \*/ public static String createAESKey(AESType type) \{ try \{ KeyGenerator key = KeyGenerator.getInstance("AES"); key.init(type.value); SecretKey ckey = key.generateKey(); byte\[\] keyByte = ckey.getEncoded(); return Base64.encodeBase64String(keyByte); \} catch (NoSuchAlgorithmException e) \{ // TODO Auto-generated catch block e.printStackTrace(); \} return ""; \} /\*\* \* AES加密 \* \* @param key \* 密钥 \* @param plaintext \* 明文 \* @return 秘文 \*/ public static String encryptAES(String key, String plaintext) \{ String ciphertext = ""; try \{ byte\[\] keyByte = Base64.decodeBase64(key); SecretKeySpec skeySpec = new SecretKeySpec(keyByte, "AES"); // 使用CBC模式,需要一个向量iv,可增加加密算法的强度 cipher.init(Cipher.ENCRYPT\_MODE, skeySpec, iv); byte\[\] pbyte = plaintext.getBytes("utf-8"); byte\[\] result = cipher.doFinal(pbyte); ciphertext = Base64.encodeBase64String(result); \} catch (Exception e) \{ e.printStackTrace(); \} return ciphertext; \} /\*\* \* 解密 \* \* @param key \* 密钥 \* @param ciphertext \* 秘文 \* @return 明文 \*/ public static String decryptAES(String key, String ciphertext) \{ String plaintext = ""; try \{ byte\[\] keyByte = Base64.decodeBase64(key); byte\[\] cbyte = Base64.decodeBase64(ciphertext); SecretKeySpec skeySpec = new SecretKeySpec(keyByte, "AES"); // 使用CBC模式,需要一个向量iv,可增加加密算法的强度 cipher.init(Cipher.DECRYPT\_MODE, skeySpec, iv); byte\[\] pbyte = cipher.doFinal(cbyte); plaintext = new String(pbyte, "utf-8"); \} catch (Exception e) \{ e.printStackTrace(); \} return plaintext; \} public static void main(String\[\] args) \{ String key128 = createAESKey(AESType.AES\_128); String key192 = createAESKey(AESType.AES\_192); String key256 = createAESKey(AESType.AES\_256); System.out.println("Key 128:" + key128); System.out.println("Key 192:" + key192); System.out.println("Key 256:" + key256); String source = "AES加密测试"; String ciphertext128 = encryptAES(key128, source); String ciphertext192 = encryptAES(key192, source); String ciphertext256 = encryptAES(key256, source); System.out.println("Ciphertext 128:" + ciphertext128); System.out.println("Ciphertext 192:" + ciphertext192); System.out.println("Ciphertext 256:" + ciphertext256); String plaintext128 = decryptAES(key128, ciphertext128); String plaintext192 = decryptAES(key192, ciphertext192); String plaintext256 = decryptAES(key256, ciphertext256); System.out.println("Plaintext 128:" + plaintext128); System.out.println("Plaintext 192:" + plaintext192); System.out.println("Plaintext 256:" + plaintext256); \} \}
相关 AES加密 一、AES是什么 AES高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府 我就是我/ 2023年10月03日 17:58/ 0 赞/ 23 阅读
相关 AES 加密 util.encryption = function (params) \{ let \{ data, param, key \} = params const res 悠悠/ 2023年02月18日 03:05/ 0 赞/ 22 阅读
相关 AES 加密 import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.c 秒速五厘米/ 2022年12月29日 15:28/ 0 赞/ 175 阅读
相关 Java加密技术(二)——对称加密算法DES&AES 本文转载于http://snowolf.iteye.com/blog/380034 接下来我们介绍对称加密算法,最常用的莫过于DES数据加密算法。 DES DE 小鱼儿/ 2022年08月04日 14:46/ 0 赞/ 216 阅读
相关 AES加密 package com.test.util.encrypt; import org.apache.commons.lang3.StringUtil 小咪咪/ 2022年07月15日 20:43/ 0 赞/ 239 阅读
相关 AES加密 AES加密是一种对称加密,即加密秘钥与解密秘钥相同 示例如下: public class Aes { //算法 private st 偏执的太偏执、/ 2022年04月14日 05:14/ 0 赞/ 266 阅读
相关 AES加密 import java.io.UnsupportedEncodingException; import java.security.InvalidKeyExce 小灰灰/ 2022年03月09日 14:46/ 0 赞/ 282 阅读
相关 AES加密 AES技术是一种对称的分组加密技术,使用128位分组加密数据,提供比WEP/TKIPS的RC4算法更高的加密强度。AES的加密码表和解密码表是分开的,并且支持子密钥加密,这种 ゞ 浴缸里的玫瑰/ 2022年02月15日 00:09/ 0 赞/ 288 阅读
相关 Python AES加密 与 JS AES加密 import execjs from Crypto.Cipher import AES from binascii import b2a_hex, a2 「爱情、让人受尽委屈。」/ 2021年12月20日 11:55/ 0 赞/ 373 阅读
相关 AES加密 介绍 AES是一种对称加密,使用同一个密钥来加密和解密一段密文 安装 pip install pycryptodome 基础语法 aes 今天药忘吃喽~/ 2021年12月09日 04:49/ 0 赞/ 327 阅读
还没有评论,来说两句吧...