簡體   English   中英

為什么pem2der和der2pem不逆?

[英]Why are pem2der and der2pem not inverses?

PHP的OpenSSL函數的補充說明中,有以下代碼段

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;
}

function der2pem($der_data) {
   $pem = chunk_split(base64_encode($der_data), 64, "\n");
   $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
   return $pem;
}

這些函數不是反函數。 我的測試代碼:

$priv_key = ...;

print $priv; // dev data, of course

print der2pem (pem2der ($priv));

版畫

-----BEGIN PRIVATE KEY-----
MIIJQwIBADANBgkqhkiG9w0BAQEFAAS... (etc)

然后

-----BEGIN CERTIFICATE-----
TEKEYMIIJQwIBADANBgkqhkiG9w0BAQEFA... (etc)

注意第二個有一個TEKEY前綴。 以十六進制表示的是4c4284 ,看起來並不重要。

這個是從哪里來的?

這些功能僅用於處理證書,而不用於處理私鑰。 結果錯誤的原因是因為pem2der函數正在尋找證書的開始( CERTIFICATE-----來自-----BEGIN CERTIFICATE----- )。 您正在嘗試以-----BEGIN PRIVATE KEY-----開頭的密鑰進行解碼。 結果的“ TE KEY”部分來自此處:“ ----- BEGIN PRIVA TE KEY -----”,是函數未處理該標頭的結果,因此substr調用返回錯誤的結果。

從理論上講,這些功能應該很容易修改以處理私鑰文件。

暫無
暫無

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

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