1、前端使用1024位的PKCS#8公钥进行加密,加密出的密文:
H4+Ff6GHcQSHprGMhu6f9CzoO/LatTQvtPUbWx1VF2Bc9XtkQWou2Tz5pXTRv3NSIwFSQDSlOP628CiTaDhNTA0NM2ybuZI0QPIR2GC7adfA/OR6Cpjau86Rdxeo7l8DnPq9tAKg+k7m8OtioJu/MG3bK8Wua+ukvXPUKhwauT4=
在网关接收到密文后,使用PKCS#8的私钥进行密文解密,但总解密是失败。
查了很多资料,找到了问题的原因,原来是URL在传输过程中会把+号换成了空格,在网关接收到的密文:
H4 Ff6GHcQSHprGMhu6f9CzoO/LatTQvtPUbWx1VF2Bc9XtkQWou2Tz5pXTRv3NSIwFSQDSlOP628CiTaDhNTA0NM2ybuZI0QPIR2GC7adfA/OR6Cpjau86Rdxeo7l8DnPq9tAKg k7m8OtioJu/MG3bK8Wua ukvXPUKhwauT4=
可以看到所有的"+"号变成了空格。
2、解决方案:
使用lua脚本将获取到的密文进行字符串的替换,将空格换成+号:
#+号处理,空格换为+
local str = string.gsub(encrypt_msg," ","+")
encrypt_msg:网关获取的密文
3、在网关处理前端信息过程中,有可能还会遇到url转义与还原问题。如后端只处理uri的转义信息,这就需要将信息进行转义后,再传给后端。openresty中的uri转义与转义还原:
ngx.escape_uri(str) url转义
ngx.unescape_uri(str) url转义还原