簡體   English   中英

PHP rsa 從 pem 文件中獲取公鑰

[英]PHP rsa get public key from pem file

我如何從基於 rsa 364 創建的 pem 文件中獲取公鑰。安裝的 crypt(RSA.php) 庫仍然低於錯誤

致命錯誤:調用 C:\\Program Files\\Apache Software Foundation\\Apache2.2\\htdocs\\rsa.php 中未定義的方法 Crypt_RSA::loadKey()

$file = "C:\key_file.pem"; 
$keypair = Crypt_RSA_KeyPair::fromPEMString(file_get_contents($file));
$public_key = $keypair->getPublicKey(); 
$rsa_pub_key = Crypt_RSA_Key::fromString($public_key->toString()); 
$rsa_obj = new Crypt_RSA; 
$verify_status = $rsa_obj->validateSign($text,$recieved_signed_sign, $rsa_pub_key) ? 'valid' : 'invalid'; 

將錯誤視為致命錯誤:調用 C:\\Program Files\\xxxx\\rsa.php 中未定義的方法 PEAR_Error::getPublicKey()

嘗試過同樣的事情 openssl_verify。 驗證正在 rturning 0 嘗試使用 384 rsa 密鑰驗證使用 base64_encode 收到的簽名。

**$base64DecodedStr = base64_decode("A1a0o8JzF7q12Sr4gJvYjslhg5XVA2fWy28.JyohJ05uyiZGyBpqazqb");
$status = openssl_verify($msg,$base64DecodedStr,$pub_key);**

請幫我解決這個問題。 非常感謝。

根據Crypt_RSA 文檔,Crypt_RSA 類沒有 loadKey() 方法。 您將公鑰作為關聯參數數組的一部分傳遞給構造函數:

$rsa_obj = new Crypt_RSA(array('public_key' => $publickey));

我的建議:不要使用 PEAR 的 Crypt_RSA,而是使用 phpseclib 的 Crypt_RSA。

PEAR 的 Crypt_RSA 不符合 PKCS#1,這意味着用它生成的簽名或密文不會與其他語言互操作,它不支持密碼私鑰,並且多年來沒有積極維護。

有關 phpseclib 的更多信息:

http://phpseclib.sourceforge.net/

這是如何在 php 中加載公鑰以及如何知道其加密中使用的位數以及如何加密數據。 請記住將數據拆分為最大大小為關鍵字節大小的塊。

<?php

// Get the public Key 
$pubKey = file_get_contents("public.key");

//echo $pubKey; echo "<br>";

$res=openssl_get_publickey($pubKey);   //convert pubkey into resource
$array=openssl_pkey_get_details($res); //read the resource details
$chunksize= $array['bits'];            //this is the chunk size 4096


$data = 'plaintext data goes here, please encrypt and decrypt the following data';
openssl_public_encrypt($data, $encrypted, $pubKey);
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM