java使用AES加密解密 AES

1import javax.crypto.Cipher; 2import javax.crypto.spec.SecretKeySpec; 3 4import org.apache.commons.codec.binary.Base64; 5/** 6 * 7 * @author Administrator 8 * 9 */ 10public class AES { 11 12 // 加密 13 public static String Encrypt(String sSrc, String sKey) throws Exception { 14 if (sKey == null) { 15 System.out.print("Key为空null"); 16 return null; 17 } 18 // 判断Key是否为16位 19 if (sKey.length() != 16) { 20 System.out.print("Key长度不是16位"); 21 return null; 22 } 23 byte[] raw = sKey.getBytes("utf-8"); 24 SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 25 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式" 26 cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 27 byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8")); 28 29 return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。 30 } 31 32 // 解密 33 public static String Decrypt(String sSrc, String sKey) throws Exception { 34 try { 35 // 判断Key是否正确 36 if (sKey == null) { 37 System.out.print("Key为空null"); 38 return null; 39 } 40 // 判断Key是否为16位 41 if (sKey.length() != 16) { 42 System.out.print("Key长度不是16位"); 43 return null; 44 } 45 byte[] raw = sKey.getBytes("utf-8"); 46 SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 47 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 48 cipher.init(Cipher.DECRYPT_MODE, skeySpec); 49 byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密 50 try { 51 byte[] original = cipher.doFinal(encrypted1); 52 String originalString = new String(original,"utf-8"); 53 return originalString; 54 } catch (Exception e) { 55 System.out.println(e.toString()); 56 return null; 57 } 58 } catch (Exception ex) { 59 System.out.println(ex.toString()); 60 return null; 61 } 62 } 63 64 public static void main(String[] args) throws Exception { 65 /* 66 * 此处使用AES-128-ECB加密模式,key需要为16位。 67 */ 68 String cKey = "1234567890123456"; 69 // 需要加密的字串 70 String cSrc = "www.gowhere.so"; 71 System.out.println(cSrc); 72 // 加密 73 String enString = AES.Encrypt(cSrc, cKey); 74 System.out.println("加密后的字串是:" + enString); 75 76 // 解密 77 String DeString = AES.Decrypt(enString, cKey); 78 System.out.println("解密后的字串是:" + DeString); 79 } 80}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )