【发布时间】:2013-03-25 22:33:32
【问题描述】:
我正在尝试在 PHP 中解码加密数据,但返回值一直为空。
要解密的数据作为数据参数进入 PHP 文件。
$dataArg1 = $_REQUEST["data"];
// Retrieve $encryptedData from storage ...
//
// Load the private key and decrypt the encrypted data
$encryptedData = $dataArg1;
$privateKey = array ( array(123456,654321,123456), array(123456,1234),
array(1234567,4321)
);
openssl_private_decrypt($encryptedData, $sensitiveData, $privateKey);
上面的函数来自 Stack Overflow 上另一个帖子的第二个回复: How to encrypt data in javascript and decrypt in php?
我假设解密后的值在 PHP 变量 $sensitiveData 中。
当我在屏幕上回显时,我什么也得不到。
echo("sensitiveData=[$sensitiveData]<br />");
想法?
更新: openssl_private_decrypt()的返回值为FALSE,返回值为NULL。
更新 2: 我从以下 URL 创建了公钥/私钥。 http://shop-js.sourceforge.net/crypto2.htm
在底部,有一行: 并将以下内容放入您的私有脚本中(可能在您的本地硬盘上 - 而不是在互联网上 - 如果您的私钥被发现,这整个事情都是无用的。)
<script>
function decrypt() {
// key = [ [d], [p], [q] ];
var key=[[123456789,123456789,123456789],[123456789,1234],[123456789,4321]];
document.form.text.value=rsaDecode(key, document.form.text.value);
}
</script>
(actual values changed)
我将翻译后的“var key=”行复制到 PHP(根据我的其他帖子)。上面的翻译使用嵌入式数组。然后我将该密钥传递给解密函数。
我的想法是 PHP 文档将私钥称为“混合”。我想知道是否可能需要其他格式的私钥。
这是输出:
dataArg1=[jmOdss9ktFc\"WO5eltUZXt0rpqS1NluNKa]
bResult=[]
sensitiveData=[]
var_dump=[NULL ]
【问题讨论】:
-
数据最初是如何加密的?为什么你认为那正是你的私钥?
-
为什么你认为它是
NULL而不是false或空字符串?你试过看var_dump($sensitiveData);吗?openssl_private_decrypt()在你的情况下返回什么? -
我不知道 var_dump()。谢谢你。我更新了我的问题。函数的返回值是 FALSE,而数据值是 NULL 也就不足为奇了。我使用 var_dump() 收集 NULL 并回显返回值。
-
我在另一个 Stack Overflow 问题中使用响应的第一部分加密了 JavaScript 中的数据。我验证了 JavaScript 端可以正常工作。我能够加密和解密。我验证了我可以传递加密数据,并且我验证了我可以在 PHP 中以可用格式构造私钥。那是另一个问题的主题。不过,我确实将上面的私钥从真实值更改为一些垃圾值。
-
你检查 $dataArg1 是否为空?
标签: php encryption rsa cryptico