支付对象加密操作

2018-03-12  本文已影响0人  eric_fun

1:需求 一个对象部分属性属于敏感字段,需要有加密和解密的操作。

     思路:通常办法是定义一个util 有加密和解密两个方法,加密的时候获取对象属性 然后加密 然后再覆盖

     晋级方法:自定义注解的形式,需要加密的字节上添加该注解,定义工具类,工具类有加密和解密两个方法,加密时候把对象交给该工具类 自动完成属性加密

步骤 1 ,自定义需要加密解密的注解

public @interface Encrypt {

       enum type{BASE64,DES}

        type type()default type.DES;

}

2,自定义传输对象

class A{

private String name;

@@Encrypt(type= type.DES)

private String password

}

3,自定义工具类

3.1 思路 获取实例,需要加密的属性

       Field[] fields = t.getClass().getDeclaredFields();
       Encrypt encrypt = field.getAnnotation(Encrypt.class);

3.2 获取属性的值

field = field.substring(0, 1).toUpperCase() + att.substring(1);

method = obj.getClass().getMethod("get" + att);
return method.invoke(obj);

3.3 设置属性的新值
Method method = obj.getClass().getMethod("set" + att, field.getType());
return method.invoke(obj, arg);

3.3 string 对象加密
public static StringencodeStr(String plainText){

byte[] b=plainText.getBytes();

    return Base64.encodeBase64URLSafeString(b);

}

3.4 string对象解密

      BASE64Encoder base64Encoder =new BASE64Encoder();

       byte[] byteMi=encryptByte(keySecert,strMing.getBytes());

        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

        IvParameterSpec zeroIv =new IvParameterSpec(iv.getBytes());

        cipher.init(Cipher.ENCRYPT_MODE, getKey(keySecert),zeroIv);

        return cipher.doFinal(data);

上一篇下一篇

猜你喜欢

热点阅读