2012-03-27 47 views
5

Tôi có RSA public key này:PHP openssl_public_encrypt "thông số quan trọng không phải là một chìa khóa hợp lệ"

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIHV/FEF+fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsdAXb2ZA1C+lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nqMGNMocjwprXy66NS7FFy1GY+NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S+sQvOzgc5W3CDjIsYEiGD+vzSVNkGiRou577wIDAQAB 

(Mỗi chủ chốt khác tôi cố gắng cung cấp cho các lỗi tương tự, quá)

và chuỗi này:

$str = "VOTE\n" . 
"server-list\n" . 
"$user\n" . 
"$userip\n" . 
time()."\n"; 

tôi sử dụng mã này để làm cho chuỗi trở thành chính xác 256 byte để nó theo tiêu chuẩn cho các ứng dụng cụ thể này:

$leftover = (256 - strlen($str))/2; 
while ($leftover > 0) { 
    $str .= "\x0"; 
    $leftover--; 
} 

Để định dạng chìa khóa, tôi làm điều này:

$key = wordwrap($key, 65, "\n", true); 
    $key = <<<EOF 
    -----BEGIN PUBLIC KEY----- 
    $key 
    -----END PUBLIC KEY----- 
EOF; 

Khi tôi làm openssl_public_encrypt($str, $encrypted, $key); tôi nhận được cảnh báo sau đây:

Warning: openssl_public_encrypt() function.openssl-public-encrypt: key parameter is not a valid public key in ...

Tôi không chắc chắn lý do tại sao điều này xảy ra. Đây là hình thức của khóa khi tôi lặp lại:

-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIH 
V/FEF 
fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsd 
AXb2ZA1C 
lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T 
01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nq 
MGNMocjwprXy66NS7FFy1GY 
NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S 
sQvOzgc5W3CDjIsYEiGD vzSVNkGiRou577wIDAQAB 
-----END PUBLIC KEY----- 

Mọi trợ giúp sẽ được đánh giá cao!

Edit: Một khóa làm việc sẽ giống như sau:

-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmHzD76i8DA25nC+Qsswi 
OM0lW+gViiQD4tEm7suxBc2BGibtdlrsprVIId92hSjQKx4x8+XVWU6k89T5vy8Y 
txpXN759OWdGkDi8uvZuYclMjW9Rao+oqSvbXH37R7oSY287I+6uOHclGhniQN3q 
RyoXBkbhDk0/FTI/i549q/gGk1UZYv449KLrDOqmtohRcIyAYVnvvWtD1kIzourq 
hMtEIrPqwoBqTaUA9kOIXw1jMovao2TN52j48KgOg9KjqtdwUwD9e6n7hJd/subF 
6woc8L7zjJFOHH5gacUC7vtiMpBpnSyLQpjFLepYYwftjsRmg4xLdh+Zvgw3xqi4 
lwIDAQAB 
-----END PUBLIC KEY----- 
+1

Điều gì đã xảy ra với ký hiệu '+' trong khóa của bạn? Họ đang đi trong khối định dạng. – sarnold

+0

Hmm .. Tôi không chắc chắn. Và tôi thực sự không biết liệu họ có phải ở đó không vì tôi thực sự không biết mình đang làm gì. Tôi đang cố gắng để làm việc với các giao thức này: https://github.com/vexsoftware/votifier – fruitcup

+1

Các dấu hiệu + đại diện cho byte nhiều như tất cả các nhân vật khác. Mã hóa Base64 sử dụng 'A-Ba-b0-9' và'/'&' + 'để mã hóa byte và có thể là ký tự' = 'cho phần đệm cuối cùng. –

Trả lời

5

Nó xảy ra với tôi lý do tại sao nó không được làm việc, vì vậy tôi ở đây để trả lời câu hỏi của riêng tôi . Bây giờ tôi nghĩ về nó, nó liên kết với những gì @sarnold ban đầu đã nói: dấu + đã biến mất (và chúng được thay thế bằng dấu cách)

nó chỉ ra rằng vì tôi đã lấy chìa khóa qua HTTP POST, nó đã định dạng URL (và do đó khóa) chuyển tất cả các dấu + thành dấu cách. Điều đó đã ném ra chìa khóa và gây ra câu hỏi hóc búa này.

Cảm ơn sự giúp đỡ. :)

1

Trước tiên, tôi khuyên bạn sử dụng phpseclib, một tinh khiết thực hiện PHP RSA. Đó là một tấn xách tay hơn và dễ sử dụng hơn và tất cả những nhạc jazz đó. Ví dụ:

<?php 
$key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtixUGzGpLXgZ7AV1HfmIHV/FEF+fww77FekRc2oLhUOd4HitwCPo76fjtdsQBEt8w9HZ3CXVphaAU2BA6MEZJ3ShVMsdAXb2ZA1C+lu7k1GV9M/BhucTg35HujSK647Sc5MwVLwFsN80dAnGsZF8gwb2TNUzXHwzbAb30T01zuqf8RCM75OwKZFYqzu7FOVrtk/w9mh92MOXG0l7WSqNIctu8Kxka/tEJJIA5nqMGNMocjwprXy66NS7FFy1GY+NnxfFLtODqq0tllc50UCDsnqSvNmj2wcnAcsCzNOoxPPgp7t8S+sQvOzgc5W3CDjIsYEiGD+vzSVNkGiRou577wIDAQAB'; 

$rsa = new Crypt_RSA(); 
$rsa->loadKey($key); 
$rsa->setPublicKey($key); 

echo $rsa->getPublicKey(); 

Nếu bạn nhấn mạnh vào việc sử dụng phần mở rộng openssl ... thử này:

"-----BEGIN PUBLIC KEY-----\r\n" . chunk_split($whatever) . "\r\n-----END PUBLIC KEY-----" 
Các vấn đề liên quan