1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 如何解决:AES在tomcat解密中文乱码 在控制台解密中文不是乱码?

如何解决:AES在tomcat解密中文乱码 在控制台解密中文不是乱码?

时间:2022-03-25 14:56:33

相关推荐

如何解决:AES在tomcat解密中文乱码 在控制台解密中文不是乱码?

这里使用AES128,进行加密,解密

加密示例:

` /** * * 加密 * * @param sSrc 原字符 * @param sKey 16位字符的key * @return * @throws Exception * @return String * @exception 异常描述 * @see */ public static String Encrypt128(String sSrc, String sKey) throws Exception { if (sKey == null) return null; if (sKey.length() != 16) throw new IllegalArgumentException("Key length must be 16."); return doEncrypt(sSrc, sKey); } private static String doEncrypt(String sSrc, String sKey) throws Exception { byte[] raw = sKey.getBytes("ASCII"); SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES");//创建密码器 cipher.init(1, skeySpec);// 初始化 byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));//加密 //字节转换成十六进制的字符串 return byte2hex(encrypted).toLowerCase(); } /** * * 字节转换成十六进制的字符串 * * @param b * @return * @return String * @exception 异常描述 * @see */ public static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = Integer.toHexString(b[n] & 0xFF); if (stmp.length() == 1) hs = hs + "0" + stmp; else { hs = hs + stmp; } } return hs.toUpperCase(); } `

解密示例:

/** * * 解密 * * @param sSrc 原字符 * @param sKey 16位字符的key * @return * @throws Exception * @return String * @exception 异常描述 * @see */ public static String Decrypt128(String sSrc, String sKey) throws Exception { if (sKey == null) return null; if (sKey.length() != 16) throw new IllegalArgumentException("Key length must be 16."); return doDecrypt(sSrc, sKey); } private static String doDecrypt(String sSrc, String sKey) throws Exception { try { byte[] raw = sKey.getBytes("ASCII"); SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(2, skeySpec); byte[] encrypted1 = hex2byte(sSrc); byte[] original = cipher.doFinal(encrypted1); return new String(original,"utf-8"); } catch (Exception ex) { ex.printStackTrace(); } return null; } /** * * 十六进制的字符串转换成字节 * * @param strhex * @return * @return byte[] * @exception 异常描述 * @see */ public static byte[] hex2byte(String strhex) { if (strhex == null) { return null; } int l = strhex.length(); if (l % 2 == 1) { return null; } byte[] b = new byte[l / 2]; for (int i = 0; i != l / 2; i++) { b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2), 16); } return b; }

如何解决:AES在tomcat解密中文乱码,在控制台解密中文不是乱码?

AES在解密后,用byte[]进行接收,需要使用new String();进行转换为字符。只需要指定new String()编码格式便可以解决解密时乱码问题。

即加密的时候:

byte[] encrypted = cipher.doFinal(sSrc.getBytes(“utf-8”));//加密

解密的时候:

byte[] original = cipher.doFinal(encrypted1);

return new String(original,”utf-8”);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。