一个java工程师必知的安全意识(信息传输篇)

我们在遇到涉及用户密码,用户联系方式,身份证信息等敏感字段的时候,一般的处理方式是:

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修饰,那么这个注解貌似是不起作用的

猜你喜欢

转载自blog.csdn.net/java_zhangshuai/article/details/84327565