2013-06-19 12 views
7

Napisałem procedurę szyfrowania zbudowaną z kilku metod w sieci. Obecnie testuję szyfrowanie i zauważyłem, że każda zaszyfrowana wartość kończy się na '=='?Wartości szyfrowania zarządzane przez AES zawsze kończą się na ==?

Czy ktoś wie, dlaczego tak się stało?

To jest kod, którego używam. Klucz ma wartość 32 znakową, a IV to wartość 16 znakowa.

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 powraca klasy AESManaged poniżej:

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

Obecnie metodę badawczą wygląda następująco:

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

Jeśli masz dwa pytania, ** zrób dwa pytania **. W tym jednym pytaniu zadajesz dwa zupełnie różne pytania. Większość ludzi odpowie tylko na jedno z nich, a wtedy będziesz miał problem z wyborem odpowiedzi do zaakceptowania. Moja rada jest taka, że ​​usuwasz drugie pytanie z tego pytania i zaczynasz nowe pytanie. –

+1

Również "char" w C# ma 16 bitów. –

Odpowiedz

Powiązane problemy