OpenID

2012-06-18 19 views
5

için Diffie Hellman anahtarının bilgi paylaşımı ile ilgili sorunlar Ben bir Wordpress eklentisi olarak kullanılmak üzere OpenID için durum bilgisi olan bir kitaplık oluşturmaya çalışıyorum, kullanarak gizli değeri hesaplamaya çalıştığımda bir sorunla karşılaşıyorum openssl işlevi openssl_dh_compute_key. Birisi bazı adımları varsa deneyebilirsiniz, ipuçları, vb olabilir ...OpenID

Teşekkürler!

const DH_DEFAULT_PRIME = "dcf93a0b883972ec0e19989ac5a2ce310e1d37717e8d9571bb7623731866e61ef75a2e27898b057f9891c2e27a639c3f29b60814581cd3b2ca3986d2683705577d45c2e7e52dc81c7a171876e5cea74b1448bfdfaf18828efd2519f14e45e3826634af1949e5b535cc829a483b8a76223e5d490a257f05bdff16f2fb22c583ab"; 
const DH_DEFAULT_GENERATOR = '02'; 

benim Diffie-Hellman anahtar

private function createDHKey($priv_key = false) { 
    if (!$priv_key) { 
     $details = array(); 
     $details['p'] = pack('H*', self::DH_DEFAULT_PRIME); 
     $details['g'] = pack('H*', self::DH_DEFAULT_GENERATOR); 
     $this->dh = openssl_pkey_new(array(
      'dh' => $details, 
     )); 
     if ($this->dh) { 
      return true; 
     } else { 
      error('OpenSSL failed to export your private key, ensure you have a valid configuration file, and PHP can find it.'); 
     } 
    } else { 
     $this->dh = openssl_pkey_get_private($priv_key); 
     return false; 
    } 
} 

First run of function

Recalling exported private key hem görüntülerin düğmesine

Ag == olduğunu

oluşturma

sabitleri ... dh ['g'] 'nin base64 kodlu değeri.

Oluşturulan özel anahtarı, kalıcı hale getirmek için bir veritabanına kaydediyorum; bu, daha sonra anahtarı openssl_pkey_get_private işleviyle yeniden oluşturmamı sağlar.

Ancak dernek isteğinden openid.dh_server_public döndü ve onu geçen ve benim anahtar

var_dump(openssl_dh_compute_key($this->op_pubkey, $this->dh)); 
+0

Gerçekten bu işlevin daha iyi belgelenmesini diliyorum! : \ –

+0

Şimdi ... bkz http://php.net/manual/en/function.openssl-dh-compute-key.php – velcrow

cevap

4

Tamam için sahte özel anahtar sonuçlarından Yeniden yaratılan alarak, iyi bildiklerini onlar Daha sonra bir soruna geri dönmekten bahseder. benim "kişisel" kod Bütün bu openssl_dh_compute_key genel anahtar için bekliyordum bir yanlış anlama oldu, iyiydi ve OP'ın genel anahtar geçirildiğinde nasıl zaman ...

dh_server_public 
    Value: base64(btwoc(g^xb mod p)) 
    Description: The OP's Diffie-Hellman public key. 

Yani, yeniden okumak Sonunda 4. veya 5. kez tıklandı.

"Benim anahtarı çiftler halinde ise Hey, ben openssl işlevi ikili bekliyor bahis .."

Yani, ek eksik adım olma base64 çözme sona erdi ...

openssl_dh_compute_key(base64_decode($this->op_pubkey), $this->dh);