您正试图使用phpseclibv2的说明安装phpseclibv3。有两种选择:
选项1:将PHPSecLib V3与Composer一起使用
此选项要求对服务器进行SSH访问。
要安装phpseclibv3,您需要
Composer
。一旦你安装好了,你就可以
composer init
然后
composer require phpseclib/phpseclib:~3.0
.
通过这样做,您可以替换此:
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
header("Content-Type: text/plain");
$sIncludePath = get_include_path() . PATH_SEPARATOR . '../inc/phpseclib';
echo $sIncludePath."\n";
set_include_path($sIncludePath);
include('Crypt/Common/AsymmetricKey.php');
include('Math/BigInteger.php');
include('Crypt/EC.php');
include('Crypt/PublicKeyLoader.php');
include('Crypt/RSA.php');
有了这个:
require __DIR__ . '/vendor/autoload.php';
一旦您完成了这项工作,phpseclibv3应该可以顺利工作。您遇到的问题是由于phpseclibv3试图自动加载引擎,但由于没有自动加载程序,所以无法自动加载。
请注意,SSH不需要在运行后使用生成的代码。要让PHPSecLib v3为没有SSH的人工作,您可以在本地执行composer init,然后composer需要PHPSecLib/PHPSecLib:3.0,然后获取您的供应商目录以及composer.json和composer.lock文件,并将其放入您想要的任何项目中。即,最终用户不会运行composer,而是运行compose器。你会下载依赖项,而他们只会使用你下载的依赖项!
选项2:手动使用PHPSecLib2
此选项不需要SSH。PHPSecLib2的功能比PHPSecLib3少,但它仍然得到了积极维护。(甚至PHPSecLib1也会定期更新。)
PHPSecLib2没有PublicKeyLoader类,因此您将使用RSA类,如下所示:
<?php
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
header("Content-Type: text/plain");
$sIncludePath = get_include_path() . PATH_SEPARATOR . '../s/phpseclib';
echo $sIncludePath."\n";
set_include_path($sIncludePath);
include('Math/BigInteger.php');
include('Crypt/RSA.php');
include('Crypt/Hash.php');
include('Crypt/Random.php');
use phpseclib\Crypt\RSA;
use phpseclib\Crypt\Hash;
use phpseclib\Crypt\Random;
function rsaEncryptionOaepSha256 ($publicKey, $plaintext) {
$rsa = new RSA;
$rsa->loadKey($publicKey);
$rsa->setHash('sha256');
$rsa->setMGFHash('sha256');
return $rsa->encrypt($plaintext);
}
function rsaDecryptionOaepSha256 ($privateKey, $ciphertext) {
$rsa = new RSA;
$rsa->loadKey($privateKey);
$rsa->setHash('sha256');
$rsa->setMGFHash('sha256');
return $rsa->decrypt($ciphertext);
}
function loadRsaPrivateKeyPem() {
// this is a sample key - don't worry !
return '
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDwSZYlRn86zPi9
e1RTZL7QzgE/36zjbeCMyOhf6o/WIKeVxFwVbG2FAY3YJZIxnBH+9j1XS6f+ewjG
FlJY4f2IrOpS1kPiO3fmOo5N4nc8JKvjwmKtUM0t63uFFPfs69+7mKJ4w3tk2mSN
4gb8J9P9BCXtH6Q78SdOYvdCMspA1X8eERsdLb/jjHs8+gepKqQ6+XwZbSq0vf2B
MtaAB7zTX/Dk+ZxDfwIobShPaB0mYmojE2YAQeRq1gYdwwO1dEGk6E5J2toWPpKY
/IcSYsGKyFqrsmbw0880r1BwRDer4RFrkzp4zvY+kX3eDanlyMqDLPN+ghXT1lv8
snZpbaBDAgMBAAECggEBAIVxmHzjBc11/73bPB2EGaSEg5UhdzZm0wncmZCLB453
XBqEjk8nhDsVfdzIIMSEVEowHijYz1c4pMq9osXR26eHwCp47AI73H5zjowadPVl
uEAot/xgn1IdMN/boURmSj44qiI/DcwYrTdOi2qGA+jD4PwrUl4nsxiJRZ/x7PjL
hMzRbvDxQ4/Q4ThYXwoEGiIBBK/iB3Z5eR7lFa8E5yAaxM2QP9PENBr/OqkGXLWV
qA/YTxs3gAvkUjMhlScOi7PMwRX9HsrAeLKbLuC1KJv1p2THUtZbOHqrAF/uwHaj
ygUblFaa/BTckTN7PKSVIhp7OihbD04bSRrh+nOilcECgYEA/8atV5DmNxFrxF1P
ODDjdJPNb9pzNrDF03TiFBZWS4Q+2JazyLGjZzhg5Vv9RJ7VcIjPAbMy2Cy5BUff
EFE+8ryKVWfdpPxpPYOwHCJSw4Bqqdj0Pmp/xw928ebrnUoCzdkUqYYpRWx0T7YV
RoA9RiBfQiVHhuJBSDPYJPoP34kCgYEA8H9wLE5L8raUn4NYYRuUVMa+1k4Q1N3X
Bixm5cccc/Ja4LVvrnWqmFOmfFgpVd8BcTGaPSsqfA4j/oEQp7tmjZqggVFqiM2m
J2YEv18cY/5kiDUVYR7VWSkpqVOkgiX3lK3UkIngnVMGGFnoIBlfBFF9uo02rZpC
5o5zebaDImsCgYAE9d5wv0+nq7/STBj4NwKCRUeLrsnjOqRriG3GA/TifAsX+jw8
XS2VF+PRLuqHhSkQiKazGr2Wsa9Y6d7qmxjEbmGkbGJBC+AioEYvFX9TaU8oQhvi
hgA6ZRNid58EKuZJBbe/3ek4/nR3A0oAVwZZMNGIH972P7cSZmb/uJXMOQKBgQCs
FaQAL+4sN/TUxrkAkylqF+QJmEZ26l2nrzHZjMWROYNJcsn8/XkaEhD4vGSnazCu
/B0vU6nMppmezF9Mhc112YSrw8QFK5GOc3NGNBoueqMYy1MG8Xcbm1aSMKVv8xba
rh+BZQbxy6x61CpCfaT9hAoA6HaNdeoU6y05lBz1DQKBgAbYiIk56QZHeoZKiZxy
4eicQS0sVKKRb24ZUd+04cNSTfeIuuXZrYJ48Jbr0fzjIM3EfHvLgh9rAZ+aHe/L
84Ig17KiExe+qyYHjut/SC0wODDtzM/jtrpqyYa5JoEpPIaUSgPuTH/WhO3cDsx6
3PIW4/CddNs8mCSBOqTnoaxh
-----END PRIVATE KEY-----
';
}
function loadRsaPublicKeyPem() {
// this is a sample key - don't worry !
return '
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8EmWJUZ/Osz4vXtUU2S+
0M4BP9+s423gjMjoX+qP1iCnlcRcFWxthQGN2CWSMZwR/vY9V0un/nsIxhZSWOH9
iKzqUtZD4jt35jqOTeJ3PCSr48JirVDNLet7hRT37Ovfu5iieMN7ZNpkjeIG/CfT
/QQl7R+kO/EnTmL3QjLKQNV/HhEbHS2/44x7PPoHqSqkOvl8GW0qtL39gTLWgAe8
01/w5PmcQ38CKG0oT2gdJmJqIxNmAEHkatYGHcMDtXRBpOhOSdraFj6SmPyHEmLB
ishaq7Jm8NPPNK9QcEQ3q+ERa5M6eM72PpF93g2p5cjKgyzzfoIV09Zb/LJ2aW2g
QwIDAQAB
-----END PUBLIC KEY-----
';
}
function base64Encoding ($input) {
return base64_encode($input);
}
function base64Decoding ($input) {
return base64_decode($input);
}
echo 'RSA 2048 encryption OAEP SHA-256 string' . PHP_EOL;
$sDataToEncrypt = "The quick brown fox jumps over the lazy dog";
echo 'plaintext: ' . $sDataToEncrypt . PHP_EOL;
// encryption
echo PHP_EOL . '* * * encrypt the plaintext with the RSA public key * * *' .PHP_EOL;
$ciphertextBase64 = base64Encoding(rsaEncryptionOaepSha256(loadRsaPublicKeyPem(), $sDataToEncrypt));
echo 'ciphertextBase64: ' . $ciphertextBase64 . PHP_EOL;
// transport the encrypted data to recipient
// receiving the encrypted data, decryption
echo PHP_EOL . '* * * decrypt the ciphertext with the RSA private key * * *' .PHP_EOL;
$ciphertextReceivedBase64 = $ciphertextBase64;
echo 'ciphertextReceivedBase64: ' . $ciphertextReceivedBase64 . PHP_EOL;
$decryptedtext = rsaDecryptionOaepSha256(loadRsaPrivateKeyPem(), base64Decoding($ciphertextReceivedBase64));
echo 'decryptedtext: ' . $decryptedtext . PHP_EOL;
?>
要手动降级到PHPSecLib2并使上述代码正常工作,您需要将phpseclib目录替换为位于该GitHub的文件:
https://github.com/phpseclib/phpseclib/tree/2.0