2012-02-28 15 views
7

पर आधारित सरल टेक्स्ट फ़ाइल एन्क्रिप्शन मैं एक साधारण पाठ फ़ाइल एन्क्रिप्शन तकनीक को लागू करने की कोशिश कर रहा हूं और मैं ऐसा करने के लिए निम्न कोड का उपयोग कर रहा हूं। कोड मेरे द्वारा नहीं लिखा गया है, मैं बस googled और मिल गया। एन्क्रिप्शन तकनीक बहुत सरल, संक्षिप्त और कार्यान्वित करने में आसान प्रतीत होती है। मैं देखता हूं कि इसमें केवल एक ही कार्य है जो फ्लाई पर एन्क्रिप्शन और डिक्रिप्शन कर सकता है। बस कुंजी पास करें यह चाल करेगा। हालांकि, मैं बस जानना चाहता था, क्या यह जांचना मेरे लिए संभव है कि उपयोगकर्ता द्वारा कुंजी पारित की गई है या नहीं। वर्तमान में यह पास की गई कुंजी के आधार पर टेक्स्ट फ़ाइल को एन्क्रिप्ट/डिक्रिप्ट करेगा। लेकिन यह जांचने के लिए कोई तंत्र नहीं है कि क्या हम सही कुंजी के साथ डिक्रिप्ट कर रहे हैं या नहीं। जो भी कुंजी हम पास करते हैं, वह डिक्रिप्ट हो जाएगी, लेकिन यह पठनीय नहीं होगा। इस समस्या से निपटने के लिए कोई विचार .. ..एक कुंजी

procedure TEnDeCrypt.EnDecryptFile(pathin, pathout: string; Chave: Word); 
var 
    InMS, OutMS: TMemoryStream; 
    cnt: Integer; 
    C: byte; 
begin 
    InMS := TMemoryStream.Create; 
    OutMS := TMemoryStream.Create; 
    try 
    InMS.LoadFromFile(pathin); 
    InMS.Position := 0; 
    for cnt := 0 to InMS.Size - 1 DO 
     begin 
     InMS.Read(C, 1); 
     C := (C xor not (ord(chave shr cnt))); 
     OutMS.Write(C, 1); 
     end; 
    OutMS.SaveToFile(pathout); 
    finally 
    InMS.Free; 
    OutMS.Free; 
    end; 
end; 
+0

मुझे नहीं पता कि लोग इसे क्यों वोट दे रहे हैं! – jimsweb

+2

यह मैं नहीं था, लेकिन इस तरह की एन्क्रिप्शन बहुत सुरक्षित नहीं है, और इसमें निवेश करने लायक नहीं है। यह एन्क्रिप्शन की तुलना में अधिक obfuscation है। आपके वास्तविक प्रश्न के लिए: कोई रास्ता नहीं है, क्योंकि आपके पास कोई वास्तविक कुंजी सिस्टम नहीं है जो गुप्त भाग को सुरक्षित किए बिना सुरक्षित रूप से प्रमाणीकृत कर सकता है। –

+0

धन्यवाद मार्को। क्या कोई अन्य तकनीक है जिसके माध्यम से मैं इसे प्राप्त कर सकता हूं? मैं बस यह सुनिश्चित करना चाहता था कि उपयोगकर्ता ने सही कुंजी दर्ज की है। मैं एन्क्रिप्शन की ताकत के बारे में चिंतित नहीं हूं। यह एक साधारण हो सकता है। – jimsweb

उत्तर

7

हैशिंग एल्गोरिदम का उपयोग करके सादे पाठ पर एक चेकसम उत्पन्न करें और इसे एन्क्रिप्टेड फ़ाइल की शुरुआत में स्टोर करें।

आप डिक्रिप्ट किए गए पाठ को हैश करके कुंजी को सत्यापित कर सकते हैं और यह सुनिश्चित कर सकते हैं कि चेकसम मिलान करता है।

यदि आप चेकसम उत्पन्न करने के लिए SHA256 जैसे मजबूत हैशिंग एल्गोरिदम का उपयोग करते हैं, तो उपयोगकर्ता के लिए ब्रूट फोर्स अटैक स्वचालित करना मुश्किल होगा क्योंकि यह कम्प्यूटेशनल रूप से महंगा होगा।

यह सुनिश्चित करने के लिए कि फ़ाइल बरकरार है, आप एन्क्रिप्टेड फ़ाइल पर एक चेकसम स्टोर भी कर सकते हैं और फ़ाइल हेडर में भी स्टोर कर सकते हैं। अन्यथा, एक कटा हुआ फ़ाइल से अमान्य पासवर्ड को अलग करने का कोई तरीका नहीं होगा।

मैं आम तौर पर Blowfish एन्क्रिप्शन एल्गोरिदम का उपयोग करता हूं, जो कई स्रोतों से डेल्फी के लिए उपलब्ध है। Blowfish कोई ज्ञात कमजोरियों है और काफी कॉम्पैक्ट और तेज़ है।

+1

+1 –

7

आप किस तरह की सामग्री अपनी फ़ाइल (चाहे वह एक बाइनरी फ़ाइल/पाठ फ़ाइल आदि है) होगा के बारे में पता है, तो आप पाठ नमूना और अगर कोई गैर- ASCII या चरित्र देख सकते हैं डिक्रिप्शन के बाद फ़ाइल में उम्मीद नहीं है।

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

उसने कहा, मैं आपको यह प्रश्न पूछूंगा - इसके पीछे क्या इरादा है? यूजर गुजरने की कुंजी एन्क्रिप्ट करना है; इसलिए यदि उपयोगकर्ता अमान्य कुंजी गुजर रहा है, तो उन्हें अमान्य आउटपुट मिलता है। आपको उपयोगकर्ता को दाएं कुंजी की ओर चलाने की आवश्यकता क्यों है? और अगर ऐसा कुछ व्यवसाय उपयोग-मामला है, तो आपको यह समझने की भी आवश्यकता है कि यह आपके एन्क्रिप्शन को तोड़ने में बहुत आसान बना देगा। मैं सुझाव दूंगा कि आप एक मानक एन्क्रिप्शन एल्गोरिदम चुनें और अपनी फ़ाइल को एन्क्रिप्ट करने के लिए इसका उपयोग करें।

+0

आपको अपने मूल्यवान सुझाव के लिए गंगाधर धन्यवाद। - इस ऐप के लिए कोई व्यावसायिक उपयोग नहीं है। यह मेरा शौक आवेदन है। Blowfish के लिए – jimsweb

2

जो भी आप पूछ रहे हैं उसे करने का सही तरीका है एन्क्रिप्ट करना-फिर-डेटा प्रमाणीकरण करना। यहां कुछ प्रासंगिक चर्चाएं हैं: Should we MAC-then-encrypt or encrypt-then-MAC?

पारंपरिक तरीका मानक मानक में मानक सिफर का उपयोग करना है, जैसे कि सीबीसी मोड में एईएस, और फिर सिफर टेक्स्ट पर एचएमएसी (जैसे एचएमएसी-एसएचए 256) की गणना करें । सीसीएम, ईएक्स, जीसीएम जैसे कुछ सिफर मोड भी हैं, जो एन्क्रिप्शन और प्रमाणीकरण दोनों निष्पादित करेंगे।

इस के लिए एचएमएसी के बजाय हैश का उपयोग न करें।

एन्क्रिप्शन के लिए उपयोग की जाने वाली कुंजी को उस कुंजी से स्वतंत्र होना चाहिए जिसका उपयोग आप प्रमाणीकरण के लिए करते हैं। आप उदा। दोनों यादृच्छिक रूप से उत्पन्न करें, लेकिन सिस्टम का उपयोग कर बिल्कुल नहीं। रैंडम फ़ंक्शन। यदि आप Vista SP2 या बाद में तैनात कर रहे हैं, तो आप Windows API से CryptGenRandom का उपयोग कर सकते हैं, लेकिन अन्यथा आपको क्रिप्टोग्राफ़िक यादृच्छिक संख्या पीढ़ी के समर्थन के साथ क्रिप्टोग्राफ़िक लाइब्रेरी का उपयोग करना चाहिए।

यदि आप पासवर्ड आधारित एन्क्रिप्शन का उपयोग करते हैं, तो एन्क्रिप्शन कुंजी और प्रमाणीकरण कुंजी प्राप्त करने के लिए पीबीकेडीएफ 2 कार्यान्वयन का उपयोग करें। यह सुनिश्चित करने के चार सामान्य तरीके हैं कि दो कुंजी स्वतंत्र हैं:

  • दो अलग नमक मानों का उपयोग करें;
  • एक नमक का उपयोग करें, लेकिन इसे अलग "लेबल" के साथ संयोजित करें, उदा। स्ट्रिंग्स 'ई' और 'ए' क्रमश:
  • दो बार लंबी व्युत्पन्न कुंजी उत्पन्न करें और एन्क्रिप्शन कुंजी के रूप में एक आधा और प्रमाणीकरण कुंजी के रूप में दूसरा आधा उपयोग करें, या
  • व्युत्पन्न कुंजी "कुंजी एन्क्रिप्शन कुंजी" "आप यादृच्छिक रूप से जेनरेट की गई एन्क्रिप्शन कुंजी और प्रमाणीकरण कुंजी एन्क्रिप्ट करने के लिए उपयोग करते हैं।
संबंधित मुद्दे