AES对称加密解密类
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; ///** AES对称加密解密类 **/ public class Aes { // /** 算法/模式/填充 **/ private static final String CipherMode = "AES/ECB/PKCS5Padding" ; ///** 创建密钥 **/ private static SecretKeySpec createKey(String password) { byte [] data = null ; if (password == null ) { password = "" ; } StringBuffer sb = new StringBuffer( 32 ); sb.append(password); while (sb.length() < 32 ) { sb.append( "0" ); } if (sb.length() > 32 ) { sb.setLength( 32 ); } try { data = sb.toString().getBytes( "UTF-8" ); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return new SecretKeySpec(data, "AES" ); } // /** 加密字节数据 **/ public static byte [] encrypt( byte [] content, String password) { try { SecretKeySpec key = createKey(password); System.out.println(key); Cipher cipher = Cipher.getInstance(CipherMode); cipher.init(Cipher.ENCRYPT_MODE, key); byte [] result = cipher.doFinal(content); return result; } catch (Exception e) { e.printStackTrace(); } return null ; } ///** 加密(结果为16进制字符串) **/ public static String encrypt(String content, String password) { byte [] data = null ; try { data = content.getBytes( "UTF-8" ); } catch (Exception e) { e.printStackTrace(); } data = encrypt(data, password); String result = byte2hex(data); return result; } // /** 解密字节数组 **/ public static byte [] decrypt( byte [] content, String password) { try { SecretKeySpec key = createKey(password); Cipher cipher = Cipher.getInstance(CipherMode); cipher.init(Cipher.DECRYPT_MODE, key); byte [] result = cipher.doFinal(content); return result; } catch (Exception e) { e.printStackTrace(); } return null ; } ///** 解密16进制的字符串为字符串 **/ public static String decrypt(String content, String password) { byte [] data = null ; try { data = hex2byte(content); } catch (Exception e) { e.printStackTrace(); } data = decrypt(data, password); if (data == null ) return null ; String result = null ; try { result = new String(data, "UTF-8" ); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } // /** 字节数组转成16进制字符串 **/ public static String byte2hex( byte [] b) { // 一个字节的数, StringBuffer sb = new StringBuffer(b.length * 2 ); String tmp = "" ; for ( int n = 0 ; n < b.length; n++) { // 整数转成十六进制表示 tmp = (Integer.toHexString(b[n] & 0XFF )); if (tmp.length() == 1 ) { sb.append( "0" ); } sb.append(tmp); } return sb.toString().toUpperCase(); // 转成大写 } // /** 将hex字符串转换成字节数组 **/ private static byte [] hex2byte(String inputString) { if (inputString == null || inputString.length() < 2 ) { return new byte [ 0 ]; } inputString = inputString.toLowerCase(); int l = inputString.length() / 2 ; byte [] result = new byte [l]; for ( int i = 0 ; i < l; ++i) { String tmp = inputString.substring( 2 * i, 2 * i + 2 ); result[i] = ( byte ) (Integer.parseInt(tmp, 16 ) & 0xFF ); } return result; } } |
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步