2012-12-17 9 views
9

से निकालने पासवर्ड यहाँ कैसे मैं phpseclib (जो काम करता है) के साथ यह कर करेंगे:निजी RSA कुंजी

<?php 
include('Crypt/RSA.php'); 

$rsa = new Crypt_RSA(); 
$rsa->setPassword('password'); 
$result = $rsa->loadKey('-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,E3B1C06E0D0C2633 

gvmXzl6W7eV1a3N5rQNwBWKY9on3IgxZudS33cip5f88FotsPSDJMvqj6LVw2RxobDjhlOOzqmTb 
VrlTnoQ6CogXFZSfiPmixiyyptCUEKJkSiEhYGM5GQm0OoGcLeLbgBb9tRpWh5IlXulKD6XFhx8q 
/eGg5a+mSkX1i7kv2+Ih3jHmEKwrnfzhcA29pBF3OQJo+Ks9IYneuk676pHtsIs7CpFKq1tDvD8Q 
O7URxnVnHLltaFvIxshqyZu92xbUYZR7YzjXl5+3w4TVgeAHUogEV+H9iZTosD/copUsbQO+78w2 
E1D3iDS94wRgx0Tjv4xlwrTpOV38FS5rdL32492DcCRlCYM4VtuwjYeWi5shJg69jCb0EwGRqfAo 
xko+lbKWELTuFKwD7n1rc/2fTarbGuf8S2AEggBLZyfXHC/9N84mXLFO2XKq+0WdiEFhQj2Cze+a 
9qcSK6tPSrjK1LPlnOOppFgDElZaZ0rxsgjtiWSIAEw/Ad+SIM5u+vqwzF8J317JlsdKoBFDw8mS 
MxCMuMksKJ23mgvY+THRIVgH3E7lEDZQzCi1Uy6ldLJcran/6wHwP88pVM2odiHkpnrJGcEBbbIk 
qsxJZhFT8aUt/cUEBj3fnP7cxoNLQfTHMPqUTqKBWaVufFzGU9YB1R+XWFULLddwJHnV7gPheBlk 
MDapowb+Is77+a9Y2VDsOXEvNpqTY0giiSrckG05IZnrhJ24JnSCwyNd99lm7XKdEGGrjBCMqIyI 
Fqox8Ahkv3KWAJPYK1eOCc5d/KwZHlnlFJq7ZYy9u3fEnxQCjOEmeXLkLangKA== 
-----END RSA PRIVATE KEY-----'); 

echo $result ? 'true' : 'false'; 
?> 

तुलना प्रयोजनों के लिए, हालांकि, मैं OpenSSL के साथ यह करने के लिए कोशिश कर रहा हूँ। यहां मेरा कोड है:

<?php 
$pkey = openssl_pkey_get_private('-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,E3B1C06E0D0C2633 

gvmXzl6W7eV1a3N5rQNwBWKY9on3IgxZudS33cip5f88FotsPSDJMvqj6LVw2RxobDjhlOOzqmTb 
VrlTnoQ6CogXFZSfiPmixiyyptCUEKJkSiEhYGM5GQm0OoGcLeLbgBb9tRpWh5IlXulKD6XFhx8q 
/eGg5a+mSkX1i7kv2+Ih3jHmEKwrnfzhcA29pBF3OQJo+Ks9IYneuk676pHtsIs7CpFKq1tDvD8Q 
O7URxnVnHLltaFvIxshqyZu92xbUYZR7YzjXl5+3w4TVgeAHUogEV+H9iZTosD/copUsbQO+78w2 
E1D3iDS94wRgx0Tjv4xlwrTpOV38FS5rdL32492DcCRlCYM4VtuwjYeWi5shJg69jCb0EwGRqfAo 
xko+lbKWELTuFKwD7n1rc/2fTarbGuf8S2AEggBLZyfXHC/9N84mXLFO2XKq+0WdiEFhQj2Cze+a 
9qcSK6tPSrjK1LPlnOOppFgDElZaZ0rxsgjtiWSIAEw/Ad+SIM5u+vqwzF8J317JlsdKoBFDw8mS 
MxCMuMksKJ23mgvY+THRIVgH3E7lEDZQzCi1Uy6ldLJcran/6wHwP88pVM2odiHkpnrJGcEBbbIk 
qsxJZhFT8aUt/cUEBj3fnP7cxoNLQfTHMPqUTqKBWaVufFzGU9YB1R+XWFULLddwJHnV7gPheBlk 
MDapowb+Is77+a9Y2VDsOXEvNpqTY0giiSrckG05IZnrhJ24JnSCwyNd99lm7XKdEGGrjBCMqIyI 
Fqox8Ahkv3KWAJPYK1eOCc5d/KwZHlnlFJq7ZYy9u3fEnxQCjOEmeXLkLangKA== 
-----END RSA PRIVATE KEY-----', 'password'); 
if ($pkey === false) exit('FAILURE'); 
openssl_pkey_export($pkey, $out_key_file); 
echo $out_key_file; 
?> 

केवल समस्या: कोड समय-समय पर मर जाता है, विफलता को प्रतिबिंबित करता है। अर्थात। openssl_pkey_get_private() कुंजी लोड नहीं कर रहा है। openssl_error_string कहते हैं "त्रुटि: 0906D066: पीईएम दिनचर्या: PEM_read_bio: खराब अंत रेखा"।

कोई विचार?

if ($pkey === false) { 
    echo openssl_error_string(); 
    exit('FAILURE'); 
} 

संपादित करें:: त्रुटि "PEM_read_bio: बुरा अंत लाइन" को देखते हुए

+5

मुझे आशा है कि इस विशेष कुंजी आपके द्वारा प्रकाशित एक आप की योजना नहीं है सामान सुरक्षित रखने के लिए उपयोग करने के लिए =) – paddy

+2

@ पिताजी दोह! >< –

+2

हो सकता है कि वह "पासवर्ड" का पासवर्ड जो उसने पोस्ट की कुंजी के लिए उपयोग कर रहा है वह वह पासवर्ड है जो वह सार्वभौमिक रूप से उपयोग कर रहा है। हो सकता है कि उसने अपना स्टैक ओवरफ्लो पासवर्ड पोस्ट किया: पी – neubert

उत्तर

8

मुझे यकीन नहीं है कि यहां क्या हो रहा है; मैं अपने कोड की कोशिश की है और यह एक ही मुद्दा देता है, तो मैं एक महत्वपूर्ण बना लेने के बाद अपने आप को:

openssl genrsa -des3 -out des3.rsa 

तो इस स्क्रिप्ट में सामग्री की नकल की:

$out_key_file = 'des3nopass.rsa'; 

$key = <<<EOS 
-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,5F2FDB4C8F710F92 

pkaBIMCdnvrejw6egagg/lGrrGJWLsceDkC0KSdouRfR8LhQS/XjSJ/Wqrj7fa36 
xXRd/USBebgy2hLAi9RMPofOjlcUyUVvZZgh0+JDQ79pH5q1FsRMcsJ+J8GO0edw 
kh8zdZoCbbtJgQjTx0JheJMDdZymw4cfK5hoZbnxX6HZ1wNhtPb7Z/noNcxpK6Zl 
CCzPgLd9hCGLBD2XqoRjOM1U2vpZwpCTdYgAtFIPMVXQQpzgIyw06CHcHvYZgnAc 
oxiVx7Z7N9r0J1vDnlrW/OU1l07D0pBr1yPRTDMI5tBMo8KDsL2tkBxqtYyOJdZr 
as/5zQDPRlbW7Jve1JuXmsnja+gN7jZ+3LpUzfRFo/wWnvOzhHQxLz+RaUpVDYTl 
F4m9zjo9dgOhlZzigOhYTB+5aq5f92Yf6K0daCwTDpU= 
-----END RSA PRIVATE KEY----- 
EOS; 

$pkey = openssl_pkey_get_private($key, 'password'); 
if ($pkey === false) { 
     die(openssl_error_string()); 
} 

openssl_pkey_export($pkey, $out_key_file); 
echo "Wrote to $out_key_file\n"; 

और वह मेरे लिए ठीक काम करता है ।

अद्यतन

मैं भी इस का उपयोग कर openssl कमांड लाइन प्रदर्शन करने की कोशिश की है, अपने कुंजी का उपयोग:

openssl rsa -in des3big.rsa -out des3bignopass.rsa 
unable to load Private Key 
14179:error:0906D066:PEM routines:PEM_read_bio:bad end line:pem_lib.c:746: 

ऐसा लगता है कि OpenSSL के साथ-साथ इसके साथ एक मुद्दा है, इसलिए यह है PHP नहीं

अद्यतन 2

बाहर कर देता है कि आपके लाइनों बहुत लंबे हैं (वे 64 विस्तृत वर्ण होने चाहिए):

-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,E3B1C06E0D0C2633 

gvmXzl6W7eV1a3N5rQNwBWKY9on3IgxZudS33cip5f88FotsPSDJMvqj6LVw2Rxo 
bDjhlOOzqmTbVrlTnoQ6CogXFZSfiPmixiyyptCUEKJkSiEhYGM5GQm0OoGcLeLb 
gBb9tRpWh5IlXulKD6XFhx8q/eGg5a+mSkX1i7kv2+Ih3jHmEKwrnfzhcA29pBF3 
OQJo+Ks9IYneuk676pHtsIs7CpFKq1tDvD8QO7URxnVnHLltaFvIxshqyZu92xbU 
YZR7YzjXl5+3w4TVgeAHUogEV+H9iZTosD/copUsbQO+78w2E1D3iDS94wRgx0Tj 
v4xlwrTpOV38FS5rdL32492DcCRlCYM4VtuwjYeWi5shJg69jCb0EwGRqfAoxko+ 
lbKWELTuFKwD7n1rc/2fTarbGuf8S2AEggBLZyfXHC/9N84mXLFO2XKq+0WdiEFh 
Qj2Cze+a9qcSK6tPSrjK1LPlnOOppFgDElZaZ0rxsgjtiWSIAEw/Ad+SIM5u+vqw 
zF8J317JlsdKoBFDw8mSMxCMuMksKJ23mgvY+THRIVgH3E7lEDZQzCi1Uy6ldLJc 
ran/6wHwP88pVM2odiHkpnrJGcEBbbIkqsxJZhFT8aUt/cUEBj3fnP7cxoNLQfTH 
MPqUTqKBWaVufFzGU9YB1R+XWFULLddwJHnV7gPheBlkMDapowb+Is77+a9Y2VDs 
OXEvNpqTY0giiSrckG05IZnrhJ24JnSCwyNd99lm7XKdEGGrjBCMqIyIFqox8Ahk 
v3KWAJPYK1eOCc5d/KwZHlnlFJq7ZYy9u3fEnxQCjOEmeXLkLangKA== 
-----END RSA PRIVATE KEY----- 
+5

ओएमजी ओपनएसएसएल के संदर्भ में एक अलग त्रुटि या समान लौटा दी है।अंत में नई लाइन, लाइनों को 64 वर्ण लंबा होना चाहिए, आदि। हालांकि अच्छा लगता है! –

1

सकता है त्रुटि के कारण की जांच कर रहे द्वारा आगे की जानकारी मिल:

[...] 
if ((strncmp(buf,"-----END ",9) != 0) || 
     (strncmp(nameB->data,&(buf[9]),i) != 0) || 
     (strncmp(&(buf[9+i]),"-----\n",6) != 0)) { 

     PEMerr(PEM_F_PEM_READ_BIO,PEM_R_BAD_END_LINE); 
     goto err; 
     } 
[...] 
यहाँ OpenSSL स्रोत के भाग जो ट्रिगर करता है

अपने कोड को देखते हुए मुझे संदेह है कि आपको निजी कुंजी स्ट्रिंग के अंत में एक न्यूलाइन चार जोड़ना होगा।

+0

यह कहता है "त्रुटि: 0906 डी066: पीईएम दिनचर्या: PEM_read_bio: खराब अंत रेखा" –

+0

इससे मदद मिल सकती है: http://edokan.wordpress.com/2011/10/22/error0906d066pem-routinespem_read_biobad- एंड-लाइन/- लेखक सुझाव देता है कि लाइन फीड char – Nathan

+0

के साथ समाप्त होना चाहिए, मैंने अभी openssl स्रोतों में त्रुटि देखी है और वास्तव में स्ट्रिंग – Nathan

संबंधित मुद्दे