[英]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.