Я хочу закодировать строку, чтобы отправить ее сторонней службе с использованием открытого ключа.Он отлично работает на локальном ПК (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();
При тестировании на локальном ПК это дает
-----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
после.
Есть идеи, почему это происходит?
РЕДАКТИРОВАТЬ:
Значение от name в Windows до URLEncoder.encode
равно:
-----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-----