记录使用SM3加密遇到的关于tomcat中JVM默认编码的坑

做了一个项目需要使用SM3加密。具体代码如下

byte[] md = new byte[32];
SM3Digest sm3 = new SM3Digest();
sm3.update(originBody.getBytes(), 0, originBody.getBytes().length);
sm3.doFinal(md, 0);
String crc= new String(Hex.encode(md)).toUpperCase();

然后出现了奇怪的情况,我自己这边加密出来的crc和对方接口接收到之后算出来的crc不一样。找了好久都没有找到问题所在,结果发现问题是处在了String.getBytes()上面这个方法是使用默认的编码。如果是在Windows环境下,JVM默认编码为GBK。
Linux环境下默认编码为UTF-8。
那么也就导致在程序中,使用String等类型时,默认采用编码会根据系统的不同使用了不同的编码。
可以在运行JVM时指定-Dfile.encoding=utf-8参数来规定编码。
在Tomcat中配置catalina文件
Linux中,在catalina.sh配置JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8"
Windows中,在catalina.bat配置set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8。

所以呢我现在的问题应该就是我这边tomcat部署在windows环境中的,所以用了GBK,而对方在SM3加密的时候服务器部署在linux上面,用了UTF-8,所以我们两边加密出来的东西永远不一样。

然后我到服务器上把在catalina.bat 配置 第二行加上了 set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8。问题解决。

写此微博,免得下次遇到这个问题再胡思乱想,这已经是第二次了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TomcatJVM优化是指对Java虚拟机的调优,以提高Tomcat服务器的性能和稳定性。根据引用[1],TomcatJVM优化主要包括以下几个方面: 1. 内存设置:通过调整JVM的堆内存大小,可以提高Tomcat的性能。可以通过修改Tomcat根目录下的bin目录的catalina.sh(Linux)或catalina.bat(Windows)文件来设置JVM的内存参数,如-Xms和-Xmx参数分别用于设置JVM的初始堆大小和最大堆大小。 2. 垃圾回收设置:垃圾回收是JVM的重要功能,可以通过调整垃圾回收算法和参数来优化Tomcat的性能。可以使用-Xloggc参数来指定垃圾回收日志文件的路径,以便进行分析和调优。 3. 线程池设置:Tomcat使用线程池来处理客户端请求,可以通过调整线程池的大小和配置来优化Tomcat的性能。可以修改Tomcat根目录下的conf目录的server.xml文件,通过修改Connector元素的属性来设置线程池的参数,如maxThreads和minSpareThreads。 4. 连接设置:可以通过调整Tomcat的连接参数来优化Tomcat的性能。例如,可以设置maxKeepAliveRequests属性来限制每个连接的最大请求数,以避免产生大量的TIME_WAIT连接。 需要注意的是,JVM优化需要根据具体的应用场景和硬件环境进行调整,不同的应用可能需要不同的优化策略。建议在进行JVM优化之前,先进行性能测试和监测,以便确定需要进行的优化方向和参数调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值