java 后台实现 crypto-js 的加解密,使用main方法直接运行,和以web项目启动,请求进去运行得到的加密字符串不同,出现这种问题的原因是以 main函数直接运行,默认字符编码是UTF-8,而以 web项目启动默认字符编码是GBK,而代码中字符串转 byte[] 数组又没有设置字符编码,或其他涉及字符编码处没有设置,因此 web项目会使用默认字符编码GBK,因此会出现中文字符加密,以 main方法直接运行和 web项目运行得到不同的加密字符串的现象
示例:如代码中出现字符串转 byte[] 数组使用 getBytes()方法
debug 看默认字符集在 main方法和 web项目两种不同方式运行,是否相同
1、main 方法运行
默认字符编码
默认字符编码是UTF-8
2、web项目运行
默认字符编码是GBK
总结:这就是为什么 main方法直接运行和 web项目运行,得到的加密字符串不同的原因
解决办法: 使用 getBytes()方法时设置字符编码,如下
getBytes(StandardCharsets.UTF_8)
类似这样的问题还有很多,如使用流时,也会出现编码问题,笔者这里提醒大家在涉及到流、字符串和 byte数组间转换时一律设置字符编码。出现这种问题时要仔细检查代码中每一处可以设置字符编码的地方,设置字符编码。很多时候写的工具类如加解密代码都是在 main方法下运行测试的,如果漏掉了字符编码设置,在 main方法下没问题,在 web环境就可能出现问题
至此完