我们在遇到涉及用户密码,用户联系方式,身份证信息等敏感字段的时候,一般的处理方式是:
1.传输使用密文,拒绝明文传输用户密码,推荐明文加盐加密,后台再解密
比如要传输的明文是123456的明文密码,我们一般要做以下处理
前台:var data = "123456";1.明文加随机盐(随机盐随机个数在加密解密时统一即可,这里以18位为例):var newData = randomString(18)+data;2.公钥加密:var pwd = 公钥加密方法(newData);具体js下载和使用可参考这里,免费的:https://www.bootcdn.cn/jsencrypt/后台:1.私钥解密String data = 私钥解密方法(pwd);2.去掉前18为随机盐字符串截取即可
//上面的公钥加密的样例实现
var 公钥加密方法 = function(明文,公钥) {if(公钥 == undefined){//没有传公钥就用默认的公钥 = 'asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd'}var jsencrypt = new JSEncrypt();jsencrypt.setPublicKey(公钥);return jsencrypt.encrypt(randomString(18)+明文);
}
//外面使用:
var olddata = '123456';
var newdata = 公钥加密方法(olddata );
2.后台日志中禁止打印明文密码,这时候可以用@JSONField(serialize=false)来防止打印出不想打印的属性
@JSONField(serialize=false)是阿里的fastJson的一个注解
比如你使用JsonUtil.toJSONString(Xxx类)打印一个类的时候,又不想打印类中的某个字段,就可以在改字段上加这个注解
比如:
@JSONField(serialize=false)private String password;
需要注意的是,如果这个属性被final修饰,那么这个注解貌似是不起作用的