- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过使用对称和非对称加密来保护 JS 前端和 PHP 后端之间的通信。我正在客户端上创建一个对称 key ,并使用 JSEncrypt 使用服务器的公钥对其进行加密,并将其发送到服务器以供将来使用。但是,当我在服务器端获取数据时,我遇到了困难。 openssl_open 需要一个信封来解密对称 key ,我什至不确定信封中应该包含哪些数据。我的印象是信封是用公钥加密的对称 key ,但使用它并没有奏效。我还尝试了不同的解码组合,因为我读到 JSEncrypt 以 base 64 编码消息,以十六进制编码 key ,但这些尝试也没有结果。
JS加密代码:
let pub = "-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----";
//I have a function that just creates a random string of characters
let key = generateKey(32);
let aesData = CryptoJS.AES.encrypt( "test", key );
let symKey = aesData.key + ":::" + aesData.iv;
let msg = aesData.toString();
let rsa = new JSEncrypt();
rsa.setPublicKey( pub );
let cryptKey = rsa.encrypt( symKey );
//I'm passing the data through a hidden form field
$("#key").val(cryptKey + ":::" + msg);
PHP解密代码:
$key = openssl_get_privatekey( file_get_contents( $_SERVER["PRIV_KEY"]) );
$encryptedKey = explode( ":::", $msg )[0];
$realMsg = base64_decode(explode( ":::", $msg )[1]);
openssl_open($realMsg, $decrypted, $encryptedKey, $key);
return $decrypted;
上面的代码没有输出任何内容,因为 openssl_open 调用失败(返回 false)。当我对 $encryptedKey 变量进行 base 64 解码时,我得到:
�vEi���pΕ��d_���@����욲JE��
但是对称 key 每次都改变,所以输出也每次都改变。就像我说的,我尝试过不同的编码组合,但它们都返回类似的废话。如 JS 代码所示,我已经对消息“test”进行了加密。
我以前从未实现过加密,所以我在这里可能离题太远,但在盯着这段代码看了几天之后,任何见解都将不胜感激。
编辑:我在使用 PHP 中的私钥而不是对称 key 进行解密时遇到问题
最佳答案
想通了!!!所以,我发现 PHP 有一个解密函数,不需要一个叫做 openssl_private_decrypt 的信封。使用私钥解密消息。通过使用该函数和 base 64 解码加密 key ,我能够在服务器端解密对称 key ,并且希望现在能够对称地解密消息。对于那些感兴趣的人,我在服务器端的代码是:
$key = openssl_get_privatekey( file_get_contents( $_SERVER['PRIV_KEY'] ) );
$encryptedKey = base64_decode(explode( ":::", $msg )[0]);
if( openssl_private_decrypt($encryptedKey, $decrypted, $key) )
{
return $decrypted;
}
return $encryptedKey;
而在客户端,我的代码与上面相同。希望这对某人有帮助!
关于php - 如何解密使用 JSEncrypt 加密的 PHP 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48963747/
我有这个简单的 JavaScript 代码: var message = "This is my message" // we create a new JSEncryp
我的理解是RSA 2048位加密的输出大小是256字节。然而,当使用 jsencrypt 测试它时,它每次都会输出 344 个字符。有人可以帮助我理解为什么会出现这种情况吗? 使用的在线jscrypt
我正在尝试通过使用对称和非对称加密来保护 JS 前端和 PHP 后端之间的通信。我正在客户端上创建一个对称 key ,并使用 JSEncrypt 使用服务器的公钥对其进行加密,并将其发送到服务器以供将
我正在尝试使用 JSEncrypt(javascript) 对文本进行 RSA 加密并使用 python 加密 (python3.7) 进行解密。大多数时候,它是有效的。但有时,python 无法解密
对了,我有个小问题。我正在使用 Javascript 库 (jsencrypt) 在浏览器中加密消息。然后将此消息发送到后端,在后端使用 Java 库 (bouncycaSTLe) 对其进行解密。我的
这可能是 this answered question 的副本,但我似乎无法获得相同的结果。希望在这里得到一些指导。 JSEncrypt(客户端) let encrypt = new Encrypt.
我已经浏览了围绕这个问题的所有教程,但未能找到解决方案。先说一些背景。我有一个 Angular 2 应用程序,我需要使用这个 JS 库进行加密:https://github.com/travist/j
我是一名优秀的程序员,十分优秀!