微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

受 file.encoding 属性影响的 Java RSACipher 结果

如何解决受 file.encoding 属性影响的 Java RSACipher 结果

我试图了解一些不是我创建但我可能需要修复的代码的行为。 根据 JVM 系统属性 file.encoding.

代码创建并初始化了一个 RSACipher 实例:

  final Cipher cipher = Cipher.getInstance(Decryptinformation.RSA_ECB_PKCS1_PADDING);
  cipher.init(Cipher.DECRYPT_MODE,decryptingKey);
  

然后在循环中使用该实例来解密加密字节。

  byte[]  plain = cipher.doFinal(scrambled,i);
  

我验证了无论file.encoding的值如何,scrambled的值都保持不变,但问题是plain中的字节在有重音字符的地方发生了变化。在我的单元测试中(针对运行时在 Wildfly 应用程序中看到的问题而编写),有一个小写的 e-accute 字符(UTF-8 中的 c3a9)。如果使用 VM 参数 -Dfile.encoding=ISO-8859-1 启动测试,我会在角色的变量 plain 中得到 c3a9。另一方面,如果我用 -Dfile.encoding=UTF-8 开始测试,我会得到 c383c2a9 代替相同的输入字节,我不知道如何系统地修复它所有字符。

谁能解释一下file.encoding对解密的影响以及如何防止字符被破坏?例如,该应用程序在 linux 上的 wildfly 上运行,其中认的 file.encoding 是 UTF-8,更改整个应用程序的此值可能会产生其他副作用,因此要求更改 file.encoding 不是一个选项.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。