dsvcqvp139098 2017-03-25 18:07
浏览 90

PHP OpenSSL可以在Linux下打开.pem私钥,但无法在Windows下打开相同的密钥

I have a PHP program that uses OpenSSL to do RSA decryption that works when I run it on my remote Linux (Ubuntu) webserver, but fails when I run it under Windows (launched from PHPstorm, using PHP's built-in web server).

I generated the private key using OpenSSL under Windows:

openssl genrsa -out private.pem 2048

Here's the PHP code that works under Linux, but fails under Windows:

$req =  "R6lnBb8Hhu5YEmVvdJKUEzckq5afHGFauRca3q6+NuPf1Jrx0+5WtCFj+uFrCBkQtu7sqCoZ+nIh
" .
        "oLqn5GHn6rLAI03kiB3USrV232LKiamzepk1mHxaMQ+q+um95XETnuCrDfH+ufTsErNo2IjhAGjF
" .
        "6SxQxA00+HpMBtu/lSKCz2x67rG3g4zdhnUXRsBlO3T0iX8S0loudklc34Phfa/4EqR14Vcb0Z7b
" .
        "Z1UdLxYJEhW32Rnk4iXZV0ChpkiNdSTOH+GfRJpKR0VwdbfuBGDtV8ktzxiNsNFaA/n4XNKPB2LU
" .
        "9CCyi+s6zYbXvayxFTcVPVMxM0zBOfa45j9nYw==";

$cryptext = base64_decode($req);

$path = 'file:///' . __DIR__ . DIRECTORY_SEPARATOR . 'private.pem';
// file_exists($path) confirmed to return true when run on both platforms.

$res = openssl_pkey_get_private($path);
openssl_pkey_export($res, $privatekey);
echo "
Private Key:$privatekey
<HR>
";
openssl_private_decrypt($cryptext, $decrypted, $privatekey);

echo("$req
<HR>
");
echo("$decrypted");

(correct) Output when run on LINUX server:

file exists
<hr>
Private Key:-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDfm6Ik7Z6Oj3ud
2xslm+CP0mzAWmO2z5ENC/KEOwi31hn9l63bsMhznDufr3uy7EEN8P4TJTt8YltX
cQxKil/JAFyL8zol1vQ6EtHQkQvDbh9I0r5Ldd7+PuiyyQIiqrEY3TSKANrbUU3k
N5vSU9BbBULlyhpFa4QCi7+A6O0SNUrn60Ew9YBEmf4Ogka1Vw9qRY/2qSTJCWJL
JMnkRsAPNhWFe/CZTizqddePYkGEku7Pq5Aj+yp++V5cg3UhbSy5Fj643RTDuy+d
A7EDygdF9MKLUZZAYjssJ2V62GthdUXHLZr4L4ql4lIjrttumDUzFwCEBEDvtIcn
hP3clFuJAgMBAAECggEBAJ0j2kbpVkwJOW4t1F4RtTZdQl/LJdgK9nycsMmMUwwe
QhWcymlhSv00BhKqV9vde7o4adU6jRtUY6yHnYOkyruOrXsMawi8jtVg9GIGDKZC
dWnP8DtHknZJ7231JLMIEXzPt2RkRWlrMbn3+mFM1Veh0ul5pgyzCgpf+yy0hCYO
TO5p4t9paexkSYroWaLt/DSvK7zXIuSZCkwG4tKPRLuGUkqEuiqXsHfuib4UZNHQ
pIQFASppa+hcFtLrzUnz42nFNPTcqg7iLfQnNbJ+6zRolGom0fCacWEt9sd0yNOn
kuCGV3AWb+eChJ9wjd5fB61fobfaYTa+98HfcGVP2AECgYEA+01uskQNDvN4J1Gt
p4+u/z30S/u3X8Hz0bvLhOucUDoWLYHY/G8djJ0tteNj0IzlrxUlJwt66lE9bWyw
09dn+F0C/lvzud5r4Vt/Wef3DUEkLu81e5chUmAPKmXUs9feAgG/JZ7n4vjc7OKZ
/EX4cwsGm7PIwzVk/fi1LWRa/ykCgYEA48msWpRwJn158MzUEBOa0Q8J+0xCetW/
b+R/YnIBmOex8zciruNXvZuvBS/ZyKrlMs6drseZm0hqK3YwdJyXEqqOnJPGiv1u
oOLRFMDoHI04Z2TRjb8bdOUACmeGzk1sih5QwRX3vyqKJx9B40zWgkbLhL53j5j1
f05uxf5K5WECgYEAt2G59bxTCyX/+DFSV4QyX3AGZaw6FFakZdh0m3qThrfclzi5
7vvmxEWupZxZqkYnFayIgAWQnIzMFp3KK8x0wnidRqAzKt90Oe9a73Cmh7WRge5t
SNLwLfyLFJVasiJEj5JWuk1LSgXwsaxqUf19X/YbzGNVjZ3ZJLvo+kbRYIECfwjl
19Wx9q+KNzkwxxfZrDJ+Y+VtFSu3LcMxKciuq2FNq6XUgYZTWxoM+sk5FUjBZDKX
35D0OwvVyE/qTfpAI6aXAvsayqajP68JLSGiZ262FX30cjsXO/tU9qtxX9KvM44x
oPXp5cOR5dOhZPF8DuUH3utQhVsWnoBaj/kr9cECgYEAq+SN+0UYDBr+UKKHjZkk
b6WWt9WOUpD/hJOWGAcl9v+03VP6NK3zje2ky9fVxyJTyH/MGbg4G1REG27Is7tr
hGKXmqpyZyIDc2vJDrDB0XrkaDP41b/by7x1CdXUr06wTvMC0XpnJvh0CGczjMDO
n0+0L6CEpfT/KZOz2LyqyUw=
-----END PRIVATE KEY-----

<hr>
R6lnBb8Hhu5YEmVvdJKUEzckq5afHGFauRca3q6+NuPf1Jrx0+5WtCFj+uFrCBkQtu7sqCoZ+nIh
oLqn5GHn6rLAI03kiB3USrV232LKiamzepk1mHxaMQ+q+um95XETnuCrDfH+ufTsErNo2IjhAGjF
6SxQxA00+HpMBtu/lSKCz2x67rG3g4zdhnUXRsBlO3T0iX8S0loudklc34Phfa/4EqR14Vcb0Z7b
Z1UdLxYJEhW32Rnk4iXZV0ChpkiNdSTOH+GfRJpKR0VwdbfuBGDtV8ktzxiNsNFaA/n4XNKPB2LU
9CCyi+s6zYbXvayxFTcVPVMxM0zBOfa45j9nYw==
<hr>
CONNECT=dd924b237b1366dafa99a112dc053344

(failing) Output when run under WINDOWS (PHPstorm, PHP's built-in web server)

C:\bin\php\php.exe C:\src\BTNcrypt-PHP\e2ncrypt\do.php
PHP Warning:  openssl_pkey_export(): cannot get key from parameter 1 in C:\src\BTNcrypt-PHP\e2ncrypt\do.php on line 23
string(28) "C:\src\BTNcrypt-PHP\e2ncrypt"
file exists
PHP Warning:  openssl_private_decrypt(): key parameter is not a valid private key in C:\src\BTNcrypt-PHP\e2ncrypt\do.php on line 25
<HR>
Warning: openssl_pkey_export(): cannot get key from parameter 1 in C:\src\BTNcrypt-PHP\e2ncrypt\do.php on line 23

Private Key:
<HR>

Warning: openssl_private_decrypt(): key parameter is not a valid private key in C:\src\BTNcrypt-PHP\e2ncrypt\do.php on line 25
R6lnBb8Hhu5YEmVvdJKUEzckq5afHGFauRca3q6+NuPf1Jrx0+5WtCFj+uFrCBkQtu7sqCoZ+nIh
oLqn5GHn6rLAI03kiB3USrV232LKiamzepk1mHxaMQ+q+um95XETnuCrDfH+ufTsErNo2IjhAGjF
6SxQxA00+HpMBtu/lSKCz2x67rG3g4zdhnUXRsBlO3T0iX8S0loudklc34Phfa/4EqR14Vcb0Z7b
Z1UdLxYJEhW32Rnk4iXZV0ChpkiNdSTOH+GfRJpKR0VwdbfuBGDtV8ktzxiNsNFaA/n4XNKPB2LU
9CCyi+s6zYbXvayxFTcVPVMxM0zBOfa45j9nYw==
<HR>

Process finished with exit code 0

I'm pretty sure this is primarily due to Windows-specific funkiness that goes beyond 0x0D 0x0A newlines vs 0x0A newlines... as an experiment, I converted the .pem file to use Windows-style newlines, but it still failed under Windows.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
    • ¥15 如何在scanpy上做差异基因和通路富集?
    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?