我一直试图让从今天早上起这个工作,但我在这件事情了几个小时卡住了。这是我的公共密钥: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)));
}
随着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
文件相同的格式。
"file:/".PUBLIC_KEY;
。它应该与2个斜杠file_get_contents(PUBLIC_KEY)
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;
}