2012-05-02 11 views
6

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

उदाहरण में: क्या एक सादा पाठ फ़ाइल डिजिटल रूप से हस्ताक्षरित हो सकती है ?, छवियों (पीएनजी, जेपीईजी, बीएमपी) के बारे में क्या?

मुझे ग्राफिक हस्ताक्षर के साथ एक छवि को "संलग्न" करने की आवश्यकता नहीं है।

आपकी मदद के लिए धन्यवाद।

उत्तर

8

phpseclib, a pure PHP RSA implementation का उपयोग करना:

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

$rsa = new Crypt_RSA(); 
extract($rsa->createKey()); 

$plaintext = 'terrafrost'; 

$rsa->loadKey($privatekey); 
$signature = $rsa->sign($plaintext); 

$rsa->loadKey($publickey); 
echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified'; 
?> 

CLI openssl साथ कि करने के लिए अनुरूप इस प्रकार है:

openssl dgst -sha1 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -out signature.txt -sign privatekey.txt plaintext.txt 
openssl dgst -sha1 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -prverify privatekey.txt -signature signature.txt plaintext.txt 
+0

आपके उत्तर के लिए धन्यवाद। मैंने एक सादे पाठ फ़ाइल के लिए डिजिटल हस्ताक्षर का परीक्षण किया, और यह ठीक काम करता है। मैंने अभी तक बाइनरी फाइलों में परीक्षण नहीं किया है, क्योंकि मुझे यकीन नहीं है कि डिजिटल हस्ताक्षर फ़ाइल को तोड़ देगा या नहीं। मैं phpseclib करने की कोशिश करूँगा। –

+0

क्या मैं इसे किसी भी तरह से फ़ाइलों के लिए उपयोग कर सकता हूं? एक अपलोड की गई छवि की तरह कहो? अग्रिम धन्यवाद –

+0

निश्चित - बस '$ plaintext = file_get_contents ('filename.ext') करें ' – neubert

1

आप इन अलग-अलग फ़ाइलों को डिजिटल रूप से साइन क्यों करना चाहते हैं?

वास्तव में पाठ फ़ाइलों या छवियों को बदलने के लिए कोई मानक नहीं है ताकि फ़ाइलों में स्वयं डिजिटल हस्ताक्षर का कुछ प्रकार हो।

यदि आप उपयोगकर्ताओं को आश्वस्त करना चाहते हैं कि फाइलें आपके साथ छेड़छाड़ नहीं की गई हैं तो उन्हें फ़ाइल का MD5 हैश दे सकता है। वे डाउनलोड की गई फ़ाइल के MD5 हैश की जांच करने के लिए निशुल्क टूल का उपयोग कर सकते हैं और यह सुनिश्चित करने के लिए कि आपने अपनी फ़ाइल को बदल नहीं दिया है, उससे तुलना करें। यह आमतौर पर सॉफ़्टवेयर/बाइनरी पैकेज के लिए उपयोग किया जाएगा जो एक तृतीय पक्ष दुर्भावनापूर्ण कोड डाल सकता है।

एक और संभावना यह है कि आप चाहते हैं कि उपयोगकर्ता कुछ फ़ाइलों की प्रामाणिकता को सत्यापित कर सकें। इस मामले में कोई उपयोगकर्ता यह सुनिश्चित करना चाहता है कि विशेष रूप से टेक्स्ट फ़ाइल या छवि आपके पास से आए। यह लगभग एक निजी कुंजी के साथ एक फ़ाइल के एमडी 5 हैश प्राप्त करने की तरह काम करता है जो कि केवल आपके लिए ज्ञात है ताकि अंतिम उपयोगकर्ता फाइल हस्ताक्षर को आपकी सार्वजनिक कुंजी से तुलना कर सके ताकि फ़ाइल को छेड़छाड़ नहीं किया जा सके और किसी विशिष्ट स्रोत से आ रहा हो। पीजीपी (बहुत अच्छी गोपनीयता) इसके लिए एक ढांचा प्रदान करता है।

मेरा सुझाव है कि आप इस बारे में अधिक जानकारी के लिए पीजीपी परिचय दस्तावेज देखें। http://www.pgpi.org/doc/pgpintro/

8

पुन: फ़ाइल के किसी भी प्रकार डिजिटल आरएसए का उपयोग करके हस्ताक्षरित किया जा सकता है, एक प्रमाण पत्र, और वह सामान, या अगर केवल कुछ प्रकार की फाइलों पर हस्ताक्षर किए जा सकते हैं?

ए: हाँ और नहीं। एक तरफ, एक मानक डिजिटल हस्ताक्षर की गणना बिट्स के किसी भी बंडल के लिए की जा सकती है, जिसमें एक सादा पाठ फ़ाइल, छवि फाइलें, बाइनरी फाइलें, कुछ भी आप कल्पना कर सकते हैं।

लेकिन फिर सवाल बन:

  1. कैसे आप डेटा फ़ाइल के साथ (जो अपने आप बिट्स की एक बाइनरी रन है) डिजिटल हस्ताक्षर सहयोगी करते हैं? क्या डेटा फ़ाइल प्रारूप डेटा पर डिजिटल हस्ताक्षर जोड़ने की अनुमति देता है? या क्या आपको खुद को डिजिटल हस्ताक्षर का प्रबंधन करने की आवश्यकता है, शायद एक अलग फ़ाइल के रूप में, शायद अपने स्वयं के आविष्कार किए गए डेटा प्रारूप का उपयोग कर?

  2. एक बार आपके पास डिजिटल हस्ताक्षरित डेटा और उसके हस्ताक्षर होने के बाद, प्राप्तकर्ता डेटा (पहचान) पर हस्ताक्षर करने वाले प्राप्तकर्ता को आश्वस्त करने के लिए डेटा और उसके हस्ताक्षर को कैसे सत्यापित करता है और डेटा हस्ताक्षर किए जाने के बाद से बदला नहीं गया है (अखंडता)?

फ़ाइल प्रारूप है कि डिजिटल हस्ताक्षर समर्थन

फ़ाइल स्वरूपों कि आंतरिक रूप से डिजिटल हस्ताक्षर का समर्थन का बड़ा लाभ है कि प्राप्तकर्ताओं पर हस्ताक्षर किए फ़ाइल प्राप्त करने से डिजिटल हस्ताक्षर और फ़ाइल की अखंडता बस की पुष्टि कर सकते है और फिर अपने स्वयं के सत्यापन सॉफ्टवेयर का उपयोग कर। प्राप्तकर्ता को प्रेषक से कुछ भी इंस्टॉल करने की आवश्यकता नहीं है।

डिजिटल हस्ताक्षर का समर्थन करने वाले कई सक्षम फ़ाइल स्वरूप हैं। उदाहरण के लिए, पीडीएफ, वर्ड। डॉक, .docx। एक्सेल .xls, .xlsx। standard for signing xml files है। इसका लाभ यह है कि किसी भी प्रकार के डेटा के लिए एक्सएमएल को लिफाफे के रूप में इस्तेमाल किया जा सकता है। उदाहरण के लिए, एक पीडीएफ फ़ाइल को डिजिटल हस्ताक्षरित किया जा सकता है और किसी को भेजा जा सकता है। प्राप्तकर्ता पीडीएफ खोलने और इसके डिजिटल हस्ताक्षर सत्यापित करने के लिए मानक/मुक्त एडोब रीडर का उपयोग कर सकते हैं।

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

एस/एमआईएम डिजिटल हस्ताक्षर टेक्स्ट या अन्य ईमेल/माइम संगठित डेटा का मानक तरीका प्रदान करता है। rfc 5751 देखें। लेकिन यह ईमेल एजेंटों से व्यापक रूप से उपयोग नहीं किया जाता है जो हस्ताक्षरित ईमेल संदेशों को उत्पन्न या प्राप्त/सत्यापित कर सकते हैं। आउटलुक इसका समर्थन करता है।

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