2012-06-18 27 views
5

Tôi đang cố gắng tạo một thư viện trạng thái cho OpenID để được sử dụng làm plugin Wordpress, tôi đang gặp sự cố khi cố gắng tính toán giá trị bí mật bằng cách sử dụng hàm openssl openssl_dh_compute_key. Tò mò nếu có ai đó có một số bước tôi có thể thử, gợi ý, v.v ...Sự cố với tính năng bí mật được chia sẻ của khóa Diffie Hellman cho OpenID

Cảm ơn!

Các hằng số ...

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

Tạo tôi Diffie-Hellman key

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

Các Ag == tại nút của cả hai hình ảnh là giá trị mã hóa base64 của dh ['g'].

Sau đó, tôi lưu khoá cá nhân đã tạo vào cơ sở dữ liệu để tiếp tục, cho phép tôi tạo lại khóa đó qua hàm openssl_pkey_get_private.

Tuy nhiên, lấy lại openid.dh_server_public từ yêu cầu hiệp hội, và đi qua nó, và chính tôi lại được tạo ra từ các kết quả khóa riêng trong một sai cho

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

Tôi thực sự muốn chức năng này được ghi nhận tốt hơn! : \ –

+0

Bây giờ là ... xem http://php.net/manual/en/function.openssl-dh-compute-key.php – velcrow

Trả lời

4

Alright, bạn cũng biết những gì họ nói về việc quay lại vấn đề sau. Tất cả của tôi mã "cá nhân" là tốt, đó là một sự hiểu lầm về những gì openssl_dh_compute_key đã mong cho khóa công khai, và làm thế nào khóa công khai của OP được truyền ...

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

Vì vậy, khi tôi đọc lại cho lần thứ 4 hoặc thứ 5 nó cuối cùng được nhấp vào.

"Này, nếu chính của tôi là dưới dạng nhị phân, tôi đặt cược chức năng openssl dự kiến ​​nhị phân .."

Vì vậy, bước thiếu thêm rốt cuộc là base64 giải mã ...

openssl_dh_compute_key(base64_decode($this->op_pubkey), $this->dh); 
Các vấn đề liên quan