2013-05-31 6 views
5

ठीक है, ठीक है, यह मेरी पहली बार एक परियोजना पर एन्क्रिप्शन के साथ काम कर रहा है। मैं एसएसएल के लिए अपने होस्टिंग प्रदाता का उपयोग कर रहा हूं, लेकिन मैं संवेदनशील डेटाबेस के हिस्सों को एन्क्रिप्ट करना भी चाहता हूं। इसके लिए, मुझे ओपनएसएसएल का उपयोग करने के लिए कहा गया था। मैं इसे अपने लोकहोस्ट (डब्ल्यूएएमपी) पर परीक्षण कर रहा हूं, और ओपनएसएसएल स्थापित किया है और PHP और अपाचे एसएसएल मोड चालू कर दिया है। ठीक है, इसलिए मैं ट्यूटोरियल का पालन कर रहा हूं और कई सुझाए गए तरीकों का उपयोग करके, सार्वजनिक कुंजी उत्पन्न करने और इसे फ़ाइल के रूप में स्टोर करने में सक्षम हूं। किसी कारण से, मैं निजी कुंजी उत्पन्न नहीं कर सकता। मुझे लगता है कि मैं कोशिश की है कोड के दो संस्करण पोस्ट करेंगे:ओपनएसएसएल निजी कुंजी नहीं बनाएगा?

// generate private key 
$privateKey = openssl_pkey_new(array(
    'private_key_bits' => 1024, 
    'private_key_type' => OPENSSL_KEYTYPE_RSA, 
)); 
// write private key to file 
openssl_pkey_export_to_file($privateKey, 'private.key'); 
// generate public key from private key 
$publicKey = openssl_pkey_get_details($privateKey); 
// write public key to file 
file_put_contents('public.key', $publicKey['key']); 
// clear key 
echo $privateKey; 

?> 

यह एक public.key फ़ाइल उत्पन्न करता है, लेकिन मुझे चेतावनी "openssl_pkey_export_to_file(): पैरामीटर 1 से कुंजी नहीं मिल सकता है:" प्रदान करता है और "openssl_pkey_get_details () पैरामीटर 1 संसाधन, बूलियन होने की अपेक्षा करता है। "

मैं भी एक वैकल्पिक पद्धति की कोशिश की:

$config = array(
    "config" => "E:/wamp/bin/apache/apache2.2.22/conf/openssl.cnf", 
    "digest_alg" => "sha512", 
    "private_key_bits" => 1024, 
    "private_key_type" => OPENSSL_KEYTYPE_RSA, 
); 

// Create the private and public key 
$res = openssl_pkey_new($config); 

// Extract the private key from $res to $privKey 
openssl_pkey_export($res, $privKey, NULL); 
echo "Private Key: ".$privKey; 
// Extract the public key from $res to $pubKey 
$pubKey = openssl_pkey_get_details($res); 
$pubKey = $pubKey["key"]; 
echo "Public Key: ".$pubKey; 
$data = 'plaintext data goes here'; 
echo "Data: ".$data; 
// Encrypt the data to $encrypted using the public key 
openssl_public_encrypt($data, $encrypted, $pubKey); 
echo "Encrypted: ".$encrypted; 
// Decrypt the data using the private key and store the results in $decrypted 
openssl_private_decrypt($encrypted, $decrypted, $privKey); 

echo "Decrypted: ".$decrypted; 

जब कोशिश कर रहा यह, सब कुछ गूंज माना जाता दुर्भाग्य से मेरी परिणाम एक खाली निजी कुंजी, एक ठीक सार्वजनिक कुंजी, सादा पाठ, और एन्क्रिप्टेड पाठ, और एक त्रुटि थी डिक्रिप्ट करने के लिए: "openssl_private_decrypt(): कुंजी पैरामीटर मान्य निजी कुंजी नहीं है"

स्पष्ट रूप से, मुझे निजी कुंजी निर्माण में कोई समस्या है। मैंने इंटरनेट को पूरी तरह से खोजा है और इसे ठीक करने में सक्षम नहीं हूं, भले ही मैंने सरल कोड लागू किया है जो हर किसी के लिए काम करता है।

अग्रिम धन्यवाद, एली Zeitouni

+0

क्या आपने कार्यों के वापसी मूल्य की जांच की है? – doptimusprime

उत्तर

2

मुझे लगता है कि आप phpseclib, a pure PHP RSA implementation साथ एक आसान समय हो सकता है। निम्नलिखित उदाहरण 1024-बिट आरएसए निजी/सार्वजनिक कुंजी बनाएगा:

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

$rsa = new Crypt_RSA(); 

extract($rsa->createKey()); 

echo $privatekey . '<br/>' . $publickey; 
?> 
+0

धन्यवाद! यह सिर्फ मेरी समस्या हल हो गया :) –

2

मुझे एक ही समस्या थी।

और यह विंडोज़ समस्या है !!!

यह यूनिक्स बेस सिस्टम पर नहीं होगा।

और, यदि मुझे पसंद है तो आप केवल विकास के लिए विंडोज का उपयोग करते हैं, तो आप एक कुंजी उत्पन्न करने के लिए पुटीटीजेन का उपयोग करते हैं, और देव पर्यावरण में इसे स्थिर, स्थिर उपयोग करते हैं!

या

OpenSSL not working on Windows, errors 0x02001003 0x2006D080 0x0E064002

5

मुझे पता है कि यह एक समय हो गया है और आप पहले से ही हो सकता है इसे हल लेकिन मुझे लगता है कि मेरा उत्तर अन्य लोगों को जो एक ही समस्या का सामना करना पड़ा के लिए सहायक हो सकता है (जैसा मैंने किया)।

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

openssl_pkey_export ($ res, $ privKey, NULL);

यह ठीक होगा अगर केवल आपके सर्वर के पास OPENSSL_CONF के लिए सही वातावरण चर है। Openssl.cnf फ़ाइल से लिंक करना, जिसे XAMPP के साथ डाउनलोड की गई README-SSL.txt फ़ाइल में उद्धृत किया गया है, को PHP से सीएसआर और कुंजी जनरेशन फ़ंक्शंस का उपयोग करना आवश्यक है।

सीएसआर और PHP से मुख्य पीढ़ी के कार्यों का उपयोग करने के लिए, आपको openssl.cnf फ़ाइल स्थापित करने की आवश्यकता होगी। हमने एक नमूना फ़ाइल शामिल की है जिसका उपयोग इस रीडमे फ़ाइल के साथ इस फ़ोल्डर में इस उद्देश्य के लिए किया जा सकता है।

इस कारण से आप openssl_pkey_new($config); आप config => '/path/to/openssl.cnf' वाले एक साहचर्य सरणी बनाने चाहिए की ही तरह के लिए

। बस इस तरह:

openssl_pkey_export($res, $privKey, NULL, $config); 

मैं भी जोड़ने के लिए है कि मेरे मामले में openssl.cnf के रास्ते अंदर है चाहते हैं:

C: \ XAMPP \ php \ एक्स्ट्रा कलाकार \ openssl \ openssl.cnf

यहां के अंदर आप एक README-SSL.txt फ़ाइल भी ढूंढ पाएंगे जो OPENSSL को कॉन्फ़िगर करने के तरीके की अच्छी व्याख्या देता है।

उम्मीद है कि यह मदद करता है। :)

3

xampp php 5.5 के साथ windows10 पर काम करने के लिए मेरे सिर के चारों ओर टक्कर लगी। आखिर में उपरोक्त टैबोन का उत्तर सही दिशा में था, आगे बढ़ने के लिए आवश्यक पथ प्रारूप को बाहर निकाला गया था!

C:/xampp/php/extras/openssl/openssl.cnf 

उम्मीद है कि यह किसी की सहायता करेगा।

1

उपयोग: openssl_pkey_export_to_file ($ परिणाम, 'privkey.pem', null, $ config);

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