2013-06-19 3 views
7

मैंने नेट पर कई विधियों से निर्मित एक एन्क्रिप्शन दिनचर्या लिखा है। मैं वर्तमान में एन्क्रिप्शन का परीक्षण कर रहा हूं और देखा है कि प्रत्येक एन्क्रिप्टेड मान '==' में समाप्त होता है?एईएस प्रबंधित एन्क्रिप्शन मान हमेशा == में समाप्त होता है?

क्या किसी को पता है कि यह मामला क्यों हो सकता है?

यह वह कोड है जिसका मैं उपयोग कर रहा हूं। कुंजी 32 char मान है और IV एक 16 char मान है।

private static readonly byte[] key = Encoding.Default.GetBytes(getKey()); 
    private static readonly byte[] iv = Encoding.Default.GetBytes("$ruVe4E!eM#kupuc"); 

    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="val"></param> 
    /// <returns></returns> 
    public static string Encrypt(string val) 
    { 
     string result = string.Empty; 

     var aes = getEncryptionType(); 

     using (MemoryStream msEncrypt = new MemoryStream()) 
     { 
      using (ICryptoTransform encryptor = aes.CreateEncryptor(key, iv)) 
      { 
       using(CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) 
       { 
        using(StreamWriter swEncrypt = new StreamWriter(csEncrypt)) 
        { 
         swEncrypt.Write(val); 
        } 
       } 
      } 
      result = Convert.ToBase64String(msEncrypt.ToArray()); 
     } 
     aes.Clear(); 
     return result; 
    } 

getEncryptionType नीचे के रूप में एक AESManaged वर्ग रिटर्न:

private static AesManaged getEncryptionType() 
    { 
     AesManaged aes = new AesManaged(); 
     aes.Mode = CipherMode.CBC; 
     aes.Padding = PaddingMode.PKCS7; 
     return aes; 
    } 

वर्तमान में परीक्षा पद्धति इस तरह दिखता है:

Random rnd = new Random(); 

       for (int i = 0; i < 50000; i++) 
       { 
        int random = rnd.Next(1147483647, int.MaxValue); 
        Guid guid = dal.getToken(CryptoService.Encrypt(random.ToString())); 

        if (i % 100 == 0) 
         addLog(string.Format("{0} new values added", i.ToString()), LogType.Dialog); 
       } 
+1

आप दो प्रश्न हैं तो ** ** दो सवाल हैं। आप इस सवाल में दो पूरी तरह से अलग प्रश्न पूछ रहे हैं। अधिकांश लोग केवल उनमें से एक का जवाब देंगे, और फिर आपको यह चुनने में कोई समस्या होगी कि कौन सा जवाब स्वीकार करना है। मेरी सलाह यह है कि आप इस प्रश्न से दूसरे प्रश्न को हटा दें और एक नया प्रश्न शुरू करें। –

+1

इसके अलावा, सी # में 'char' 16 बिट्स है। –

उत्तर

11

कि आधार 64 एन्कोडिंग के लिए मानक है। विवरण के लिए विकिपीडिया लेख के "पैडिंग" खंड को पढ़ें।

http://en.wikipedia.org/wiki/Base64

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