赞
踩
在对安全性要求比较高的报文做加密的时候,算法有很多种,我这里主要用到的就是AES加密算法。由于在国内使用,所以不可避免的要对中文进行加密和解密,而在这个过程中,发现,如果不做处理,很容易会出现中文乱码。
下面是常见的情况:
一、中文乱码
不对密码进行编码处理
byte[] decryptResult = decrypt(encryptResult, password);
System.out.println("解密后:" + new String(decryptResult));
运行后
加密前:我是shoneworn
解密后:鎴戞槸shoneworn
二、对文字进行编码处理,但是在传输过程中草率的将byte[]转成String, String code = new String(bytes); 由于AES加密算法要求密文是16位的倍数。所以,这么处理,在解密的时候,就会报各种错。比如下面的。
String code = new String(encryptResult);
byte[] decryptResult = decrypt(code.getBytes(), password);
结果就.........
加密前:我是shoneworn
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at com.ailin.test.AES.decrypt(AES.java:72)
at com.ailin.test.AES.main(AES.java:173)
Exception in thread "main" java.lang.NullPointerException
at java.lang.String.(Unknown Source)
at com.ailin.test.AES.main(AES.java:174)
三、给功能正常的,能传中文的,不报错的AES加密加密算法源码
package com.ailin.test;
import java.io.UnsupportedEncodingException;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。