【问题标题】:$rsa->encrypt() has problems with my public key$rsa->encrypt() 我的公钥有问题
【发布时间】:2019-01-09 18:53:12
【问题描述】:

我正在尝试使用 phpseclib 加密某些内容,但由于某种原因,encrypt() 函数没有返回任何内容。

这是我现在拥有的核心:

include('/pathto/Crypt/RSA.php');

$key = '-----BEGIN PUBLIC KEY-----
MIIB/TCCAWYCCQDJ7TMYJFzqYDANBgkqhkiG9w0BAQUFADBCMQswCQYDVQQGEwJjbjEVMBMGA1UE
BwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRkMCAXDTE3MDUwOTA1
MTkxMFoYDzIxMTcwNDE1MDUxOTEwWjBCMQswCQYDVQQGEwJjbjEVMBMGA1UEBwwMRGVmYXVsdCBD
aXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQDb8V0OYUGP3Fs63E1gJzJh+7iqeymjFUKJUqSD60nhWReZ+Fg3tZvKKqgNcgl7EGXp1yNi
fJKUNC/SedFG1IJRh5hBeDMGq0m0RQYDpf9l0umqYURpJ5fmfvH/gjfHe3Eg/NTLm7QEa0a0Il2t
3Cyu5jcR4zyK6QEPn1hdIGXB5QIDAQABMA0GCSqGSIb3DQEBBQUAA4GBANhIMT0+IyJa9SU8AEya
WZZmT2KEYrjakuadOvlkn3vFdhpvNpnnXiL+cyWy2oU1Q9MAdCTiOPfXmAQt8zIvP2JC8j6yRTcx
JCvBwORDyv/uBtXFxBPEC6MDfzU2gKAaHeeJUWrzRv34qFSaYkYta8canK+PSInylQTjJK9VqmjQ
-----END PUBLIC KEY-----';

$rsa = new Crypt_RSA();
$rsa->loadKey($key);

$sometext = 'test this text';

echo $rsa->encrypt($sometext);

我下载的是 1.0 版。

怎么了?


我挖得更深了,找到了this issue,并将我的部分测试代码改成这样:

if (!$rsa->encrypt($sometext)) {
    echo "false";
} else {
    echo $rsa->encrypt($sometext);
}

这证明我的密钥在某种程度上是错误的。但是格式应该是怎样的呢?

【问题讨论】:

    标签: php rsa phpseclib rsa-key-fingerprint


    【解决方案1】:

    您的 RSA 公钥实际上是 X509 证书。它包含一个公钥,但它本身并不是一个公钥。通过这样做,我能够让您的代码示例正常工作:

    <?php
    include('File/X509.php');
    
    $key = '-----BEGIN PUBLIC KEY-----
    MIIB/TCCAWYCCQDJ7TMYJFzqYDANBgkqhkiG9w0BAQUFADBCMQswCQYDVQQGEwJjbjEVMBMGA1UE
    BwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRkMCAXDTE3MDUwOTA1
    MTkxMFoYDzIxMTcwNDE1MDUxOTEwWjBCMQswCQYDVQQGEwJjbjEVMBMGA1UEBwwMRGVmYXVsdCBD
    aXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
    iQKBgQDb8V0OYUGP3Fs63E1gJzJh+7iqeymjFUKJUqSD60nhWReZ+Fg3tZvKKqgNcgl7EGXp1yNi
    fJKUNC/SedFG1IJRh5hBeDMGq0m0RQYDpf9l0umqYURpJ5fmfvH/gjfHe3Eg/NTLm7QEa0a0Il2t
    3Cyu5jcR4zyK6QEPn1hdIGXB5QIDAQABMA0GCSqGSIb3DQEBBQUAA4GBANhIMT0+IyJa9SU8AEya
    WZZmT2KEYrjakuadOvlkn3vFdhpvNpnnXiL+cyWy2oU1Q9MAdCTiOPfXmAQt8zIvP2JC8j6yRTcx
    JCvBwORDyv/uBtXFxBPEC6MDfzU2gKAaHeeJUWrzRv34qFSaYkYta8canK+PSInylQTjJK9VqmjQ
    -----END PUBLIC KEY-----';
    
    $x509 = new File_X509();
    $x509->loadX509($key);
    $rsa = $x509->getPublicKey();
    
    $sometext = 'test this text';
    
    echo $rsa->encrypt($sometext);
    

    【讨论】:

    • 您为我指明了正确的方向。感谢那!我还需要包含 Crypt/RSA.php$rsa = new Crypt_RSA(); $rsa-&gt;loadKey($pkey); echo $rsa-&gt;encrypt($plaintext); 才能让它工作!
    猜你喜欢
    • 2020-04-07
    • 2017-02-06
    • 2016-11-29
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2012-01-28
    相关资源
    最近更新 更多