c# नेट नेट क्लास पुस्तकालय के साथ रिजेंडेल एन्क्रिप्शन का उपयोग कैसे करें?(नेट फ्रेमवर्क नहीं)



.net cryptography (1)

नेट नेट क्लास पुस्तकालय में हम राइजेंडल एन्क्रिप्शन का उपयोग कैसे करते हैं? (कोई नेट फ्रेमवर्क कक्षा पुस्तकालय नहीं) हमें एक से अधिक प्रोजेक्ट में उपयोग करने के लिए एक साझा .NET कोर लाइब्रेरी बनाने की आवश्यकता है और एन्क्रिप्ट और डिक्रिप्ट विधियों को कार्यान्वित करने की आवश्यकता है जो प्रोजेक्ट्स में समान राइजेल एन्क्रिप्शन का उपयोग करते हैं।

हम वर्तमान में उपयोग कर रहे हैं:

  • वी.एस. एंटरप्रायर 2015
  • सी#
  • नेट कोर कक्षा पुस्तकालय
  • .NETStandard, संस्करण = v1.6 संदर्भ

ऐसा प्रतीत होता है कि रीजेंडेल और एईएस के कार्यान्वयन नेट कोर 1.0 रिहाई से गायब है ... ऐसा लगता है कि केवल बेस कक्षाएं शामिल हैं रेजेंडेल या एईएस एन्क्रिप्शन के एक नेट कोर के कार्यान्वयन को हम कैसे प्राप्त कर सकते हैं? नई कोर कक्षा पुस्तकालय परियोजना के संदर्भ के रूप में जोड़ा गया है?

एनक्रिप्ट विधि है जो नेट फ्रेमवर्क 4.5.2 में काम करती है:

    public static string Encrypt(string valueToEncrypt, string symmetricKey, string initializationVector)
    {
        string returnValue = valueToEncrypt;

        var aes = new System.Security.Cryptography.RijndaelManaged();
        try
        {
            aes.Key = ASCIIEncoding.ASCII.GetBytes(symmetricKey);
            aes.IV = ASCIIEncoding.ASCII.GetBytes(initializationVector);
            aes.Mode = CipherMode.CBC;
            aes.Padding = PaddingMode.ISO10126;

            var desEncrypter = aes.CreateEncryptor();
            var buffer = ASCIIEncoding.ASCII.GetBytes(valueToEncrypt);

            returnValue = Convert.ToBase64String(desEncrypter.TransformFinalBlock(buffer, 0, buffer.Length));
        }
        catch (Exception)
        {
            returnValue = string.Empty;
        }

        return returnValue;
    }

Rijndael और एईएस के बीच अंतर (.नेट में) है कि रिजेंडेल ब्लॉक आकार को बदलने की अनुमति देता है, लेकिन एईएस नहीं है। चूंकि राइजेंडेल प्रबंधित की डिफ़ॉल्ट ब्लॉक आकार एईएस ब्लॉक आकार (128 बिट / 16 बाइट) के समान है, वास्तव में, एईएस का उपयोग करना।

कार्यान्वयन के प्रकार को नाम से शुरू करने के बजाय, फ़ैक्टरी का उपयोग करें ( Aes.Create() )। यह दोनों .NET कोर और .NET फ्रेमवर्क में काम करता है।

उल्लेख के लायक अन्य चीजें:

  • सभी सममित एल्गोरिथ्म के उदाहरण IDisposable हैं, आपको उनका प्रयोग एक बयान में करना चाहिए।
  • सभी ICryptoTransform उदाहरण (जैसे आपके गलत नामित desEncryptor ) IDisposable हैं, आप उन्हें एक using कथन में उपयोग करना चाहिए
  • आईएसओ 010126 पैडिंग .नेट कोर 1.0 में उपलब्ध नहीं है। यदि आपको मौजूदा धाराओं के साथ संगत होना चाहिए तो आप पैडिंग को खुद पर लागू कर सकते हैं और पैडिंगमोड निर्दिष्ट कर सकते हैं। अन्यथा, पीकेसीएस 7 अधिक मानक है।
  • आपकी एईएस कुंजी बहुत यादृच्छिक नहीं है, क्योंकि यह एक एएससीआईआई स्ट्रिंग से आता है (बहुत सारे मान मान्य नहीं होंगे)।
    • Base64 कम से कम पूर्ण वैल्यू रेंज है
    • PBKDF2 (पासवर्ड-आधारित कुंजी व्युत्पत्ति फंक्शन 2) Rfc2898DeriveBytes वर्ग के माध्यम से साझा स्ट्रिंग-गुप्त में, पूर्वानुमान शोर आउट के लिए अनुमति देता है।
    • महत्वपूर्ण संगत सामान्य रूप से बेहतर है, लेकिन न ही ईसीडीएच और न ही क्लासिक डीएच एनईटी कोर 1.0 में उपलब्ध है।
  • आमतौर पर एन्क्रिप्टकर्ता को एक यादृच्छिक चतुर्थ गणना की जानी चाहिए (कॉल aes.GenerateIV() यदि एक ही ऑब्जेक्ट का उपयोग कई कार्यों के लिए किया जाता है और इसे सिफरटेक्स्ट के साथ प्रस्तुत करते हैं। इसलिए एन्क्रिप्ट एक कुंजी और सादा पाठ लेता है और एक सिफर टेक्स्ट और चतुर्थ उत्पादन करता है। डिक्रिप्ट ले (कुंजी, IV, साइफरटेक्स्ट) और सादा पाठ का उत्पादन करता है।




rijndaelmanaged