2009-05-10 11 views
8

मेरा मालिक चाहता है कि मैं डेटा हस्तांतरण के दौरान उपयोग की गई कुछ जानकारी एन्क्रिप्ट करूँ। एन्क्रिप्टेड होने के लिए अलग-अलग तार आठ से बीस अक्षरों के बीच होते हैं। एन्क्रिप्ट और डिक्रिप्ट करने के लिए एक पासवर्ड का उपयोग किया जाना चाहिए, इसलिए मुझे एक सममित एल्ग्रिथम की आवश्यकता है। मैं अपना खुद का रोल नहीं करना चाहता - मैं सी # से .NET में निर्मित एक का उपयोग करना चाहता हूं।.NET में छोटे तारों को एन्क्रिप्ट करने का सबसे अच्छा तरीका क्या है?

तो, कौन सा एल्गोरिदम सर्वोत्तम है?

+2

ROT13। यह भी बहुत कुशल है! –

+0

मेरी पोस्ट यहां देखें: [http://stackoverflow.com/questions/202011/encrypt-decrypt-string-in-c](httpoverstow.com/questions/202011/encrypt-decrypt-string-in- सी) – NotDan

+0

यह जांचें [एन्क्रिप्शन ट्यूटोरियल] (http://msdn.microsoft.com/en-us/library/aa302405.aspx)। –

उत्तर

8

ट्रिपलडेस?

आप encrypy के लिए कोड का System.Security.Cryptography.TripleDESCryptoServiceProvider

छोटे राशि का उपयोग कर सकते हैं/डिक्रिप्ट ... वास्तव में क्या यह टिन :)

+0

मैं आपसे सहमत हूं कि डीईएस उनके लिए सबसे अच्छा विकल्प है। –

+0

डीईएस के साथ मेरी एकमात्र चिंता यह है कि एक महत्वपूर्ण विनिमय को सुरक्षित तरीके से कैसे करें। –

+1

यह समस्या (कुंजी एक्सचेंज) किसी भी सममित सिफर पर लागू होती है (बेशक वहां असममित के साथ भी समस्याएं हैं), और ओपी ने स्पष्ट रूप से अनुरोध किया है कि सममित। http: //en.wikipedia।संगठन/विकी/Key_exchange शुरू करने के लिए एक अच्छी जगह है, लेकिन यह एक जटिल विषय है। –

1

तुम बस RSA एन्क्रिप्शन का उपयोग कर सकता है पर कहते हैं, के बाद से इन छोटी स्ट्रिंग हैं करता है , जो कुंजी एक्सचेंज को सरल बना देगा।

आरएसए के साथ आप कितना एन्क्रिप्ट कर सकते हैं कुंजी लंबाई पर आधारित है।

मैं उछाल वाले महल से आरएसए लाइब्रेरी का प्रशंसक हूं।

6

ट्रिपलडेस एक बहुत अच्छा विकल्प है, लेकिन आप AesCryptoServiceProvider (एईएस) पर भी विचार कर सकते हैं, जो एक आधुनिक सममित सिफर है।

2

.net सुरक्षा कक्षाएं:

हैश

* MD5 
* MD5Cng 
* SHA1 
* SHA1Managed 
* SHA1Cng 
* SHA256 
* SHA256Managed 
* SHA256Cng 
* SHA384 
* SHA384Managed 
* SHA384Cng 
* SHA512 
* SHA512Managed 
* SHA512Cng 

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

* DES 
* DESCryptoServiceProvider 
* TripleDES 
* TripleDESCryptoServiceProvider 
* Aes 
* AesCryptoServiceProvider 
* AesManaged 
* RC2 
* RC2CryptoServiceProvider 
* Rijandel 
* RijandelManaged 

असममित एन्क्रिप्शन: एन्क्रिप्शन और डिक्रिप्शन के लिए अलग-अलग कुंजी का उपयोग करता है।

* DSA 
* DSACryptoServiceProvider 
* ECDsa 
* ECDsaCng 
* ECDiffieHellman 
* ECDiffieHellmanCng 
* RSA 
* RSACryptoServideProvider 
+1

यह कक्षा के नामों का एक बहुत अच्छा डंप है, लेकिन उनमें से अधिकतर सबमिटकर्ता (जो एक/सममित// एन्क्रिप्शन/एल्गोरिदम चाहता है) के लिए कोई प्रासंगिकता नहीं है, हैश या असममित सिफर नहीं। –

3

यहाँ des3 एन्क्रिप्शन

''' <summary> 
''' Encrypts a memory string (i.e. variable). 
''' </summary> 
''' <param name="data">String to be encrypted.</param> 
''' <param name="key">Encryption key.</param> 
''' <param name="iv">Encryption initialization vector.</param> 
''' <returns>Encrypted string.</returns> 
Public Shared Function Encrypt(ByVal data As String, ByVal key As String, ByVal iv As String) As String 
    Dim bdata As Byte() = Encoding.ASCII.GetBytes(data) 
    Dim bkey As Byte() = HexToBytes(key) 
    Dim biv As Byte() = HexToBytes(iv) 

    Dim stream As MemoryStream = New MemoryStream 
    Dim encStream As CryptoStream = New CryptoStream(stream, des3.CreateEncryptor(bkey, biv), CryptoStreamMode.Write) 

    encStream.Write(bdata, 0, bdata.Length) 
    encStream.FlushFinalBlock() 
    encStream.Close() 

    Return BytesToHex(stream.ToArray()) 
End Function 

''' <summary> 
''' Decrypts a memory string (i.e. variable). 
''' </summary> 
''' <param name="data">String to be decrypted.</param> 
''' <param name="key">Original encryption key.</param> 
''' <param name="iv">Original initialization vector.</param> 
''' <returns>Decrypted string.</returns> 
Public Shared Function Decrypt(ByVal data As String, ByVal key As String, ByVal iv As String) As String 
    Dim bdata As Byte() = HexToBytes(data) 
    Dim bkey As Byte() = HexToBytes(key) 
    Dim biv As Byte() = HexToBytes(iv) 

    Dim stream As MemoryStream = New MemoryStream 
    Dim encStream As CryptoStream = New CryptoStream(stream, des3.CreateDecryptor(bkey, biv), CryptoStreamMode.Write) 

    encStream.Write(bdata, 0, bdata.Length) 
    encStream.FlushFinalBlock() 
    encStream.Close() 

    Return Encoding.ASCII.GetString(stream.ToArray()) 
End Function 
0

डेस काफी इस बिंदु पर अप्रचलित है साथ & डिक्रिप्ट समारोह को एनक्रिप्ट कर रहा है। यहां Wikipedia है। यदि आप बहुत कुछ बदल रहे हैं, तो यह पर्याप्त हो सकता है, लेकिन यदि आप थोड़ी देर के लिए कुंजी पर निर्भर हैं, तो एईएस बेहतर विकल्प की तरह दिखता है।

बेशक यह एक सवाल है कि आपको कितनी सुरक्षा चाहिए। लेकिन एईएस भी वहां पर सही निर्माण कर रहा है।

मैंने छोटे तारों के लिए एईएस का उपयोग किया है, और यह अच्छा काम करता है।

मैंने ट्रिपलडीईएस के बारे में जो पढ़ा है वह यह है कि चूंकि डीईएस आसानी से क्रैक करने योग्य है, ट्रिपलडेस अभी भी पर्याप्त नहीं है।

+2

दरअसल, विकिपीडिया (http://en.wikipedia.org/wiki/TripleDES# सुरक्षा) और एनआईएसटी (http://csrc.nist.gov/publications/nistpubs/800-57/SP800-57-Part1.pdf) (पृष्ठ 66), कहें कि ट्रिपल डीईएस 2030 तक सुरक्षित होने की उम्मीद है। –

+0

[मूल एनआईएसटी दस्तावेज़] (http://web.archive.org/web/20090327043940/http://csrc.nist.gov/publications/ इंटरनेट आर्काइव से nistpubs/800-57/SP800-57-Part1.pdf)। [संशोधित एनआईएसटी दस्तावेज़] (http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57- भाग 1-revised2_Mar08-2007.pdf) (2007) ट्रिपल डीईएस पर एक ही निष्कर्ष के साथ। –

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

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