我试图通过使用对称和非对称加密来保护 JS 前端和 PHP 后端之间的通信。我正在客户端上创建一个对称密钥,并使用服务器的公钥和 JSEncrypt 对其进行加密,然后将其发送到服务器以供将来使用。但是,当我在服务器端获取数据时,我遇到了困难。openssl_open 需要一个信封来解密对称密钥,我什至不确定信封中应该包含什么数据。我的印象是信封是用公钥加密的对称密钥,但使用它并没有起作用。我还尝试了不同的解码组合,因为我读到 JSEncrypt 以 64 进制编码消息,以十六进制编码密钥,但这些尝试也是徒劳的。
\n\nJS加密代码:
\n\nlet pub = "-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----";\n\n//I have a function that just creates a random string of characters\nlet key = generateKey(32);\nlet aesData = CryptoJS.AES.encrypt( "test", key );\nlet symKey = aesData.key + ":::" + aesData.iv;\nlet msg = aesData.toString();\n\nlet rsa = new JSEncrypt();\nrsa.setPublicKey( pub );\nlet cryptKey = rsa.encrypt( symKey );\n\n//I\'m passing the data through a hidden form field\n$("#key").val(cryptKey + ":::" + msg);\nRun Code Online (Sandbox Code Playgroud)\n\nPHP解密代码:
\n\n$key …Run Code Online (Sandbox Code Playgroud)