我想对String进行编码,以使用公共密钥将其发送到第三方服务。它可以在本地PC(Windows 7)上正常运行,但是当部署在服务器(Red Hat Linux Server)上时,它无法按预期工作,因此服务返回错误
第三方公司提供了一个使用服务的示例,该示例用于实现给定的客户端:
PGPEncryptor encryptor = new PGPEncryptor();
String name = encryptor.encrypt(request.getName(), publicKey);
name = URLEncoder.encode(name , StandardCharsets.UTF_8.toString())
.replaceAll("\\%0D%0A", "\\\\r\\\\n")
.replaceAll("%3A", ":")
.replaceAll("\\+", " ")
.replaceAll("\\%2F", "/")
.replaceAll("\\%2B", "+")
.trim();
在本地PC上测试时,它会给出
-----BEGIN PGP MESSAGE-----\r\nVersion: BCPG v1.23\r\n\r\nhQEMA....(A LOT OF CHAR)......pK9Q\r\n-----END PGP MESSAGE-----\r\n
但是在服务器上的输出是
-----BEGIN PGP MESSAGE-----%0AVersion: BCPG v1.23%0A%0AhQEMA....(A LOT OF CHAR).........DVI6O%0A-----END PGP MESSAGE-----%0A
好像之后URLEncoder.encode
上的结果没有被replaceAll
函数所取代。
为什么会这样?
编辑:
在URLEncoder.encode
之前的Windows中,名称中的值是:
-----BEGIN PGP MESSAGE-----
Version: BCPG v1.23
hQEMA9CJDjcM+dYnAQf/Tf1a3cdlBU441cW+Xf6RLPUQ+EebbPP2RvU6zx/wxhci
YJnJqCHzyUVnIVEeVgeMgqAYDgtQAHmywnzB6wL3BMkVl1Ok108/1/zjEbKKyLeX
tpX3ovW0Rcs25CwqOgybhyejHI2pZOz58T2LbhtZnMPn4jQrp1WuAbOqa4iSMIKc
48AQY8yeksbOHmnQAJi98wNc+dRoUQMlHX3GpWT1/fI2U5m20yMuPlZLyiax6ER6
dJ44EVypxPyjmEULgXnGw7vp76P43kwO5mzQbVHU2EXY9TsERieBqE/+/0AHrDtf
p2yY4kN2JSaEnHXm38Hh4UIszXG2WRm65bkJEzuxwMkhDOqGhbeJdGcjnGkMG45F
gbxTqsIzeRx9895LB0K8C90M
=Yu1E
-----END PGP MESSAGE-----