AES/CBC/PKCS5Padding对称加密
1 package unit; 2 import javax.crypto.Cipher; 3 import javax.crypto.spec.IvParameterSpec; 4 import javax.crypto.spec.SecretKeySpec; 5 6 import org.apache.commons.codec.binary.Base64; 7 /** 8 * AES/CBC/PKCS5Padding 对称加密 9 * @author jia 10 * 11 */ 12 public class AES_CBC { 13 14 private static final String ALGORITHM = "AES/CBC/PKCS5Padding"; 15 /** 16 * 数据加密 17 * @param srcData 18 * @param key 19 * @param iv 20 * @return 21 */ 22 public static String encrypt(String srcData,byte[] key,byte[] iv) 23 { 24 SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); 25 Cipher cipher; 26 String encodeBase64String = null; 27 try { 28 cipher = Cipher.getInstance(ALGORITHM); 29 cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv)); 30 byte[] encData = cipher.doFinal(srcData.getBytes()); 31 encodeBase64String = Base64.encodeBase64String(encData); 32 } catch (Exception e) { 33 e.printStackTrace(); 34 } 35 return encodeBase64String; 36 } 37 38 /** 39 * 数据解密 40 * @param encDataStr 41 * @param key 42 * @param iv 43 * @return 44 */ 45 public static String decrypt(String encDataStr,byte[] key,byte[] iv) 46 { 47 byte[] encData = Base64.decodeBase64(encDataStr); 48 SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); 49 Cipher cipher; 50 byte[] decbbdt = null; 51 try { 52 cipher = Cipher.getInstance(ALGORITHM); 53 cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv)); 54 decbbdt = cipher.doFinal(encData); 55 } catch (Exception e) { 56 e.printStackTrace(); 57 } 58 return new String(decbbdt); 59 } 60 61 public static void main(String[] args) throws Exception { 62 String str = "fot4Ginq4iey7kLUUmA+dA=="; 63 byte[] s = Base64.decodeBase64(str); 64 String s2 = "12345678ilkljklkjv"; 65 String iv = "1234567890123456"; 66 System.out.println("加密前: "+s2); 67 String encrypt = AES_CBC.encrypt(s2, s, iv.getBytes()); 68 System.out.println("加密后: "+new String(encrypt)); 69 String decrypt = AES_CBC.decrypt(encrypt, s, iv.getBytes()); 70 System.out.println("解密后: "+decrypt); 71 } 72 }
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现