JAVA_AesCBC例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * AES 是一种可逆加密算法,对用户的敏感信息加密处理 * 对原始数据进行AES加密后,在进行Base64编码转化; * 正确 */ public class AesCBC { /*已确认 * 加密用的Key 可以用26个字母和数字组成 * 此处使用AES-128-CBC加密模式,key需要为16位。 */ private static String sKey= "1234567890123456" ; private static String ivParameter= "1234567890123456" ; private static AesCBC instance= null ; //private static private AesCBC(){ } public static AesCBC getInstance(){ if (instance== null ) instance= new AesCBC(); return instance; } // 加密 public String encrypt(String sSrc, String encodingFormat, String sKey, String ivParameter) throws Exception { Cipher cipher = Cipher.getInstance( "AES/CBC/PKCS5Padding" ); byte [] raw = sKey.getBytes(); SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES" ); IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes()); //使用CBC模式,需要一个向量iv,可增加加密算法的强度 cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); byte [] encrypted = cipher.doFinal(sSrc.getBytes(encodingFormat)); return new BASE64Encoder().encode(encrypted); //此处使用BASE64做转码。 } // 解密 public String decrypt(String sSrc, String encodingFormat, String sKey, String ivParameter) throws Exception { try { byte [] raw = sKey.getBytes( "ASCII" ); SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES" ); Cipher cipher = Cipher.getInstance( "AES/CBC/PKCS5Padding" ); IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes()); cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); byte [] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc); //先用base64解密 byte [] original = cipher.doFinal(encrypted1); String originalString = new String(original,encodingFormat); return originalString; } catch (Exception ex) { return null ; } } public static void main(String[] args) throws Exception { // 需要加密的字串 String cSrc = "123456" ; System.out.println( "加密前的字串是:" +cSrc); // 加密 String enString = AesCBC.getInstance().encrypt(cSrc, "utf-8" ,sKey,ivParameter); System.out.println( "加密后的字串是:" + enString); System.out.println( "1jdzWuniG6UMtoa3T6uNLA==" .equals(enString)); // 解密 String DeString = AesCBC.getInstance().decrypt(enString, "utf-8" ,sKey,ivParameter); System.out.println( "解密后的字串是:" + DeString); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架