最近开发过程中有一个需求:对webservice接口传输的对象参数的内容进行加密。参考网上的一些AES加密的实例,通过反射读取对象的属性和属性值,加密后反写(解密同理),实现了该功能,具体代码如下:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.security.SecureRandom;
import java.util.List;
import java.util.Objects;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.axis.encoding.Base64;
public class AESUtil {
private static final String PWD = "pwd2020";
public static final int SECRET_LEVEL_2=128;
public static final int SECRET_LEVEL_3=256;
public static final int SECRET_LEVEL_4=2048;
/**
* 对指定对象的属性值进行加密
*
* @param o
* @return
*/
public static Object encryObject(Object o,int level) {
String[] names = getFiledName(o);
for (String name : names) {
Object value = getFieldValueByName(name, o);
if (value instanceof Object[]) {//数组
for (Object item : (Object[]) value) {
item = encryObject(item,level);
}
}else if (value instanceof List) {//列表
for (Object item : (List) value) {
item = encryObject(item,level);
}
} else if ((value instanceof String) || (value i