在PHP 7.2 RSA / ECB / PKCS1Padding解密

问题描述 投票:0回答:2

我一直试图让从今天早上起这个工作,但我在这件事情了几个小时卡住了。这是我的公共密钥:https://pastebin.com/EBszJhSi我有一个字符串,我需要进行加密。

字符串=“你好”

这是我下面的代码...

function RSAEncryption($text)
{

    $encrypted = 'hey';
    $publicKey = "file:/".PUBLIC_KEY;
    $plaintext = "Hello";
    $pubkey = openssl_pkey_get_public(file_get_contents(PUBLIC_KEY));
    openssl_public_encrypt($plaintext, $encrypted, re($publicKey), OPENSSL_PKCS1_PADDING);
    echo $encrypted;   //encrypted string
    return $encrypted;
}

这将返回什么。这纯粹是空白。

var_dump(openssl_public_encrypt($plaintext, $encrypted, re($publicKey), OPENSSL_PKCS1_PADDING));

这将返回“假”。我已经试过多个库像phpseclib以及和具有另一个问题。我试过phpseclib,1.0和2.0两个版本。与phpseclib问题是,文件和一些变量人失踪,即使我从官方渠道下载。

不管怎么说,能有人帮我吗?

编辑:

PUBLIC_KEY的值是/location/keys/publickey.pem

re()功能:

function re($key_file_path)
{
    $handle = fopen($key_file_path, "r");
    // echo "Key Contents : " . fread($handle, filesize($key_file_path)) . "<br>";
    return nl2br(fread($handle, filesize($key_file_path)));
}
php rsa public-key-encryption phpseclib php-7.2
2个回答
0
投票

随着phpseclib:

$key = '---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAABJQAAAQEAgsYRVei5nVln0cX9D/x5OcscdO5WCsmyZUEN
dHhfgVD8UklasxcXElKoL0UEer9nvJWMILAU/ZMHbf0O1SaiYbhFmDFyHi/CfwT6
QHD2mu7qLbadXXs0OiGiTUPwZX2Sux2uoxm0ZwfxjSbO85rlJ7Yg0ZjXkRiw+4qT
OQNyYEq4Vt6R/BwIdf5Yt75+7Nzlm5HHi4TPNE63YJJTdazJQ1OWgdZWIZjk4M9K
Zl8x9qNRsKd2GC1G6CGq+L1DOgBbPVWPE7DGUVYJYYF609Iau11LXS6d2FBDUS3S
xna7mtmlZQNEvSRtctuojWfwWI2k1Ac/DW3RJ+M1ccN78dseEw==
---- END SSH2 PUBLIC KEY ----';

$key = preg_replace('#----.*?----#', '', $key);
$key = preg_replace('#Comment: .*#', '', $key);
$key = str_replace(["\r", "\n"], '', $key);

$key = 'ssh-rsa ' . $key;

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

echo $rsa;

Echo'ing到按键一般是看关键成功加载一个好方法。如果您注释掉preg_replace年代,str_replace'ssh-rsa' . $key位(即,如果你尝试直接加载键),它不会加载,但如果他们在的地方,然后它。

因为base64编码的关键结构,最终,一个SSH密钥格式和OpenSSL不支持的这项技术不会与OpenSSL的工作。 phpseclib,相反,请问但不是完全一样的格式为您的钥匙。 phpseclib预计键是,他们将在~/.ssh/authorized_keys文件相同的格式。


-1
投票
  1. 检查您的文件路径:"file:/".PUBLIC_KEY;。它应该与2个斜杠
  2. 你试图从文件的名称,而不是从路径文件内容:file_get_contents(PUBLIC_KEY)
  3. 是什么re($publicKey)办?它不是PHP的内置功能
    function RSAEncryption($text)
    {
        $publicKeyContent = file_get_contents("file://".PUBLIC_KEY);
        $publicKey = openssl_pkey_get_public($publicKeyContent);

        openssl_public_encrypt($text, $encrypted, $publicKey, OPENSSL_PKCS1_OAEP_PADDING);

        return $encrypted;
    }
© www.soinside.com 2019 - 2024. All rights reserved.