AES加密解密

1<html> 2 3<head> 4 <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script> 5 <script> 6 function getAesString(data,key,iv){//加密 7 var key = CryptoJS.enc.Latin1.parse(key); 8 var iv = CryptoJS.enc.Latin1.parse(iv); 9 var srcs = CryptoJS.enc.Utf8.parse(data); 10 11 var encrypted = CryptoJS.AES.encrypt(srcs,key, 12 {iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}); 13 return encrypted; 14 } 15 function getDAesString(encrypted,key,iv){//解密 16 var key = CryptoJS.enc.Latin1.parse(key); 17 var iv = CryptoJS.enc.Latin1.parse(iv); 18 var decrypted = CryptoJS.AES.decrypt(encrypted,key, 19 {iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}); 20 return decrypted.toString(CryptoJS.enc.Utf8); 21 } 22 function getAES(){ //加密 23 var data = 'abcde';//明文 24 var key = 'qaz'; //密钥 25 var iv = '123456'; 26 var encrypted = getAesString(data,key,iv); //密文 27 28 // var enstr = CryptoJS.enc.Base64.stringify(encrypted.ciphertext); 29 30 console.log(encrypted.ciphertext.toString()); 31 console.log("-----------------------"); 32 33 var back0 = CryptoJS.enc.Hex.parse(encrypted.ciphertext.toString()); 34 35 console.log(back0); 36 37 var back1 = CryptoJS.enc.Base64.stringify(back0); 38 39 var back = getDAesString(back1,key,iv); 40 console.log(back); 41 } 42 getAES(); 43 </script> 44</head> 45<body> 46</body> 47</html> 48 49package com.hmp.common.util; 50 51import javax.crypto.Cipher; 52import javax.crypto.KeyGenerator; 53import javax.crypto.spec.SecretKeySpec; 54 55import org.apache.commons.codec.binary.Base64; 56import org.apache.commons.codec.binary.Hex; 57 58public class AesEncryptUtil { 59 60 //可配置到Constant中,并读取配置文件注入,16位,自己定义 61 private static final String KEY = "abcdefgabcdefg12"; 62 63 //参数分别代表 算法名称/加密模式/数据填充方式 64 private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding"; 65 66 /** 67 * 加密 68 * @param content 加密的字符串 69 * @param encryptKey key值 70 * @return 71 * @throws Exception 72 */ 73 public static String encrypt(String content, String encryptKey) throws Exception { 74 KeyGenerator kgen = KeyGenerator.getInstance("AES"); 75 kgen.init(128); 76 Cipher cipher = Cipher.getInstance(ALGORITHMSTR); 77 cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES")); 78 byte[] b = cipher.doFinal(content.getBytes("utf-8")); 79 80 String hexStr = parseByte2HexStr(b); 81 82 // 采用base64算法进行转码,避免出现中文乱码 83 return hexStr; 84 85 } 86 87 /** 88 * 解密 89 * @param encryptStr 解密的字符串 90 * @param decryptKey 解密的key值 91 * @return 92 * @throws Exception 93 */ 94 public static String decrypt(String encryptStr, String decryptKey) throws Exception { 95 96 byte[] hexs = Hex.decodeHex(encryptStr); 97 String str = Base64.encodeBase64String(hexs); 98 99 KeyGenerator kgen = KeyGenerator.getInstance("AES"); 100 kgen.init(128); 101 Cipher cipher = Cipher.getInstance(ALGORITHMSTR); 102 cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES")); 103 // 采用base64算法进行转码,避免出现中文乱码 104 byte[] encryptBytes = Base64.decodeBase64(str); 105 byte[] decryptBytes = cipher.doFinal(encryptBytes); 106 107 return new String(decryptBytes); 108 } 109 110 public static String encrypt(String content) throws Exception { 111 return encrypt(content, KEY); 112 } 113 public static String decrypt(String encryptStr) throws Exception { 114 return decrypt(encryptStr, KEY); 115 } 116 117 118 /**将二进制转换成16进制 119 * @param buf 120 * @return 121 */ 122 public static String parseByte2HexStr(byte buf[]) { 123 StringBuffer sb = new StringBuffer(); 124 for (int i = 0; i < buf.length; i++) { 125 String hex = Integer.toHexString(buf[i] & 0xFF); 126 if (hex.length() == 1) { 127 hex = '0' + hex; 128 } 129 sb.append(hex); 130 } 131 return sb.toString(); 132 } 133 134 /**将16进制转换为二进制 135 * @param hexStr 136 * @return 137 */ 138 public static byte[] parseHexStr2Byte(String hexStr) { 139 if (hexStr.length() < 1) 140 return null; 141 byte[] result = new byte[hexStr.length()/2]; 142 for (int i = 0;i< hexStr.length()/2; i++) { 143 int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16); 144 int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16); 145 result[i] = (byte) (high * 16 + low); 146 } 147 return result; 148 } 149 150 151 public static void main(String[] args) throws Exception { 152 153 String mw = AesEncryptUtil.encrypt("admin"); 154 155 System.out.println(mw); 156 157 System.out.println(AesEncryptUtil.decrypt(mw)); 158 159 } 160}
点赞
收藏

评论区

加载中...

相关推荐

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 )

AES加密解密 - HelloWorld