我的脚本使用openssl_private_decrypt()
解密在另一个程序中使用RSA加密的字符串。目前它写入文件。但是当我尝试在文本编辑器中打开它时,它说它无法检测到编码。如果我试图回应它,没有任何东西出现。如果我输出它的长度,我会得到256
,而不是正确的3
。
我知道解密是正确的,因为在输出文件上使用cat
terminal命令可以提供正确的数据。
$ cat decrypted.txt
看起来这是一个字符编码问题,我听到的一个问题可能会给PHP带来很多痛苦。我甚至试过utf8_encode()
。问题可能是什么?
以下是代码:
$results = '';
openssl_private_decrypt(
base64_decode(
<<<EOS
QWlG+AZIt9GE0hw0wwcPRtUWueMLBxj3YWpa5zQBoz1ttnt7TvlxDtYWZcvaUL/qr2CJCADE2iTR
G72FhAwew2fhqlqmsxL7Nns3yegflTTMXyilVM3mPU4Cx94ylLfa+ZrqrNEepaRorNJ/js5iTq9i
avegO/kYOv4zhEsZirlk/Mj0vVv6irWo8WyZoCDC2SwfGWeSUI8F4pq4FUkRh9V/0zAUZ+3P0A7Z
SrA80dSa6U/J+poRcmE1vRLQXvM8dBtFRKmb0zfltLUBMcMhcglzAhcpemJ99OCZmUuynFRcRNkj
CkOLsO+lSHntcbmXqsKE+of78gnU3tp5hHSHIg==
EOS
),
$results,
openssl_pkey_get_private(
// load private key
),
OPENSSL_NO_PADDING
);
echo $results;
答案 0 :(得分:1)
事实上,您获得的解密数据恰好是单个块的长度而不是预期数据的长度,这实际上是指向padding问题。
确保双方都使用相同的padding flag。
答案 1 :(得分:0)
我对openssl_private_decrypt并不熟悉,但对我来说,提供base64_encode()'d数据给openssl_private_encrypt()似乎是合乎逻辑的。
在这种情况下,您通过在解密时以错误的顺序运行来破坏数据。
好像你想首先解密字符串,然后在未加密的字符串上运行base64_decode()。