[英]Use PHP to generate a public/private key pair and export public key as a .der encoded string
目前,我有一些有效的php代碼來生成私有/公共密鑰對並將它們存儲在兩個變量中。 這些變量是字符串,一個變量包含私鑰,另一個變量包含公鑰。 我研究了堆棧溢出,還發現了一些代碼,可將pem編碼的鍵字符串轉換為der編碼的鍵字符串。 但是,我不知道如何將公鑰字符串轉換為pem格式以將其轉換為der。 請不要說我不需要最終將字符串轉換為pem,而只需要der編碼的字符串即可。
我的代碼如下:
$userKey = $_POST["key"];
$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
function encryptData($value){
$key = $userKey;
$text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
return $crypttext;
}
// Create the keypair
$res = openssl_pkey_new($config);
// Get private key
openssl_pkey_export($res, $privKey);
// Get public key
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
function pem2der($pem_data) {
$begin = "CERTIFICATE-----";
$end = "-----END";
$pem_data = substr($pem_data, strpos($pem_data, $begin)+strlen($begin));
$pem_data = substr($pem_data, 0, strpos($pem_data, $end));
$der = base64_decode($pem_data);
return $der;
}
$der = pem2der($pubKey);
//Send der data to client here
提前致謝!
閱讀openssl_pkey_new()
的API時,即使密鑰對不是證書(由openssl_pkey_get_public()
的方法描述推測openssl_pkey_new()
也應該使用openssl_pkey_get_public()
嘗試:
openssl_pkey_new()
生成一個新的私鑰和公鑰對。 可以使用openssl_pkey_get_public()
獲得密鑰的公共部分。
您沒有證書,因此PEM到DER可能會失敗。 base 64解碼是正確的,但是請確保您具有正確的頁眉,頁腳和結構。 您應該對其進行修改以符合公鑰的表示形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.