2016-04-08 11 views
0

Bu işlevler tersleri olmayan bu pasajıpem2der ve der2pem neden ters değil? <a href="http://php.net/manual/en/ref.openssl.php" rel="nofollow">PHP's OpenSSL functions</a> için ek yorumlarında

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

var. Benim Test kodu:

$priv_key = ...; 

print $priv; // dev data, of course 

print der2pem (pem2der ($priv)); 

Baskılar

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

sonra

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

Not ikincisi bir TEKEY öneki vardır. Onaltılı olarak, önemli görünmeyen 4c4284.

Bu nereden geldi?

+0

Resmi bir PHP kodu değil. Eğer hoşuna gitmiyorsa, belki de kendi yazını? Bahse girerim, bunun artık ne yapmasını istediğin için daha iyi destek var. – Machavity

cevap

1

Bu işlevler, yalnızca özel anahtarları değil, sertifikaları işlemek için tasarlanmıştır. Sonucun nedeni, pem2der işlevinin bir sertifikanın başlangıcını (CERTIFICATE-----, -----BEGIN CERTIFICATE-----) aramasından kaynaklanır. -----BEGIN PRIVATE KEY----- ile başlayan bir anahtarın kodunu çözmeye çalışıyorsunuz. Sonucun "TE KEY" kısmı buradan geliyor: "----- BEGIN PRIVA TE KEY -----" ve bu üstbilgiyi kullanmayan işlevlerin bir sonucu olarak substr çağrıları yanlış sonuç döndürüyor . Teorik olarak, fonksiyonlar, özel anahtar dosyalarını işlemek üzere değiştirmek için çok kolay olmalıdır.

İlgili konular