PHP OpenSSL解密返回零字节文件

时间:2013-03-12 15:08:29

标签: php openssl

我已经生成了公钥/私钥对:

-----BEGIN CERTIFICATE-----
MIIE6jCCA9KgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBrjELMAkGA1UEBhMCVVMx
CzAJBgNVBAgTAkNBMREwDwYDVQQHEwhTYW4gSm9zZTEfMB0GA1UEChMWY29kZXdv
cnh4IHdlYiBzZXJ2aWNlczEaMBgGA1UECxMRVHJhbnNmZXJFbmdpbmUgSFExFzAV
BgNVBAMTDlRyYW5zZmVyRW5naW5lMSkwJwYJKoZIhvcNAQkBFhpub3JlcGx5QHRy
YW5zZmVyZW5naW5lLm5ldDAeFw0xMzAzMTIxNDI0NDFaFw0xNDEwMTMwMTI4MDla
MIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExETAPBgNVBAcTCFNhbiBKb3Nl
MR8wHQYDVQQKExZjb2Rld29yeHggd2ViIHNlcnZpY2VzMRowGAYDVQQLExFUcmFu
c2ZlckVuZ2luZSBIUTEXMBUGA1UEAxMOVHJhbnNmZXJFbmdpbmUxKTAnBgkqhkiG
9w0BCQEWGm5vcmVwbHlAdHJhbnNmZXJlbmdpbmUubmV0MIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAtmTfkg8+GA2xogfWU3eLiCLvpUcjGqht15/1tuy/
FKulH6wWByB6ufKcFqEPGjJ4qduqkfPl9hAxOfbKwrksvOTfIXkhXFQRxOSw5WT0
iXCjY03xqXBYmCofq7DjbLuvmKmnj1doZHtbH+kRLTOej9JNCOGHouGK3VQVOeYr
qQZK1WgcvsGJX6AWNaCdhSyJ4+FxNc1UQ6IRhI1G5bN0L0MTzIZ2eHhYqK0SnfSj
L6CKRw3GxS+92dWnA4kCjvcu5Kpq7ESuyAM3ELVFfAbYW5pkscyn7fEUNXFxATPH
STyhnL9X46vxQWt2Rk1hXcM6/wVjGvn/FT0338xcSiluFQIDAQABo4IBDzCCAQsw
HQYDVR0OBBYEFCYyn3nR5UlaDU+vhOAv1GtW0UxkMIHbBgNVHSMEgdMwgdCAFCYy
n3nR5UlaDU+vhOAv1GtW0UxkoYG0pIGxMIGuMQswCQYDVQQGEwJVUzELMAkGA1UE
CBMCQ0ExETAPBgNVBAcTCFNhbiBKb3NlMR8wHQYDVQQKExZjb2Rld29yeHggd2Vi
IHNlcnZpY2VzMRowGAYDVQQLExFUcmFuc2ZlckVuZ2luZSBIUTEXMBUGA1UEAxMO
VHJhbnNmZXJFbmdpbmUxKTAnBgkqhkiG9w0BCQEWGm5vcmVwbHlAdHJhbnNmZXJl
bmdpbmUubmV0ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBAI9A
a5MNf2FZOyziY8Evv9lyYCFQzfOv1KvBg1H12QGSeXzktY3zZq4qQq3xFkL9F1ix
xUy+iupZZfKSoW8yTIQZOdCdWZgQ7oWGlDscRMOLmUIGbUp6sBobLXFhA3gkS6iY
30cvfxro12Ci6heNtBR4NN1H8S2UJAIVww2b4ATR+vanuQRXtIShegNdKC38cFsM
eCNJ6f/dV1VLOAe0BHr/Df8IpTS0S9lzrv7vfmyxAfImZSnF4jBeefo8jDLDdvU0
WmHEAecF8FyDOIGdwL0QBdfzy8lw5/3V3yhimRX4ngkCcemhnC7p+bbEnoiucp7X
dvtrzVOcAJOvJIDcqxU=
-----END CERTIFICATE-----

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAtmTfkg8+GA2xogfWU3eLiCLvpUcjGqht15/1tuy/FKulH6wW
ByB6ufKcFqEPGjJ4qduqkfPl9hAxOfbKwrksvOTfIXkhXFQRxOSw5WT0iXCjY03x
qXBYmCofq7DjbLuvmKmnj1doZHtbH+kRLTOej9JNCOGHouGK3VQVOeYrqQZK1Wgc
vsGJX6AWNaCdhSyJ4+FxNc1UQ6IRhI1G5bN0L0MTzIZ2eHhYqK0SnfSjL6CKRw3G
xS+92dWnA4kCjvcu5Kpq7ESuyAM3ELVFfAbYW5pkscyn7fEUNXFxATPHSTyhnL9X
46vxQWt2Rk1hXcM6/wVjGvn/FT0338xcSiluFQIDAQABAoIBAQCEP6n3vsOYLz2w
LZyS0qhCYop+vZDPgHZ8lQhVxV1bQIWu7FjgfAVglG/m3IsVxKjHCHap8z23Z9A5
ph8oh5nPsOe03p540qA7slItUkEY8qoVk+t4nvQuCMUD+XM9YO0WdVUAUzFnQiY1
ggmpS7dZsvOWT+jICl9k0dW+MI1RtPvk0v011c8OOtMzdOCCcx52EIeVRlBce3Qk
AQSQ/Ql2TqVaNXW5PebIEOVv1h6ZWVB4hBq74FaI+A51yXfNayuiPQYq4AcZb1o9
cxxqv5Iy6ZkVZbke9dof+7uCeqyDlRAZ1XvkFCLeuHgx2Fa80B1ogR9ky0gtgEXz
Jju3G5m1AoGBANrv/Ddk3O89p6ptZg2tB+TD3pWJX3y/4uilK/2aFwCAi0qY3CyP
FnzPktlb4wVw56o+bzLPYHtsRn93XcoINoC2ioqgyN3eoha35w9fzQ9PxSwKHVyW
Vz7c1JZbaJuQnH5UYG1Qy3K4K4MgqAgTGny8ia0ct7aX05HaxPgQXWq3AoGBANVF
OCqrtGb+/b3KshtPOJbf5ZBSekGWLuDmosmjLcL4oD7FInQGoy4Npu6tb2FQHDZ+
47kNTwc/IiwOvHyXIrlTB4zbSqxOxY2Y7yv0txbaSAvwt136h5zuV93n48DO+BJD
xFAAzhYKAUCsnIxUjRKfLLIWfMjB+uTCEaOQCRGTAoGATsy5lqZy7pjeU/T0GlAA
21G0N1YuTBQ0c0+fubNQPBoICF1kQZVunpWHYTw1RawRdbDrDPqe201pQk+QLjsu
gr0wuByOr2yGIm8mdt4gTDaF3Qf28XAbDsEksslLqVIvQTjVTAMcdrnaz2Ndlypp
CiRB2VDQvqN+vqxi4HXjaZkCgYBaAFkgoM+D+64HTyf0oG0INrqBOl0/mmp0HMCs
CUIBmry9YKIWhsqMX9SHuwda8NzHHqtpZ7VnIHyCTUG77mgH/4MbLVwI9UEnbVfZ
m+88JKfs6gvoDBb44hiQnBCgSHel9ZU+Eejmohg/O9jg27mhFy1chmLosfv4V/Hr
rZg2IwKBgQCsngJZuupvJiEVSTe9SNGdqxA8dlxbbaZN7TgjBGfJacgUXAClZCU0
GpSzS9tu0RvsmuNLD1P2dEk1LFR3buo+BzVaer5bByE7PyYmWi1C802D+urDtJcz
dUWvXBOuZBbcHrHFj51pBDl5O5VUR2bbwFHtApj+r06lrBV+9HVeZA==
-----END RSA PRIVATE KEY-----

现在我使用2097152块加密文件,因为文件很大:

// Now read the file!
$fp = fopen($file_name, 'rb');
$fw = fopen($file_name.'.enc', 'ab');

while (!feof($fp)) {
    $block_content = fread($fp, 2097152);

    $pubKey[] = openssl_pkey_get_public( $public_key );
    $sealed = "";
    $ekeys = "";
    openssl_seal( $dataToEncrypt, $sealed, $ekeys, $pubKey );

    fwrite( $fw, $_sealed );
    $sent_block_count++;
} // end while

此代码没问题 - 文件已加密并保存....

问题在于解密过程:

    $fp = fopen($file_name, 'rb');
    $fw = fopen($new_name, 'ab');
    if ( $fp && $fw ) {

    while (!feof($fp)) {
        $block_content = fread($fp, 2097152);
        $privKey = openssl_pkey_get_private( $_private );
        $open = "";
        $ekeys = "";
        openssl_open( $sealed, $open, $ekeys, $private_key );
        fwrite( $fw, $open );
        $sent_block_count++;
    } // end while

我没有收到任何错误,但输出文件总是零字节。

0 个答案:

没有答案