crypto-js java后台加密 mian方法运行和 javaweb请求得到的加密字符串不同

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环境就可能出现问题

 

 

至此完

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世君子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值