2016-03-30 10 views
0

kullanarak şifrelenmiş dizesinde nokta üst üste almak mı ki ben sonradan tasarruf Böyle bir nokta üst üste ile ayrı bir dizede:mümkün ben bir şifre şifrelemek için yönteminin altında kullanıyorum Base64

kullanıcı adı: MyEncryptedString

Benim sorum şu ki, yöntemim bir iki nokta üst üste içeren bir dize döndürüyor olabilir mi?

public static string EncryptString(string password, string sharedSecret) { 
    if (string.IsNullOrEmpty(password)) 
     throw new ArgumentNullException("password"); 
    if (string.IsNullOrEmpty(sharedSecret)) 
     throw new ArgumentNullException("sharedSecret"); 

    string outStr = null;      // Encrypted string to return 
    RijndaelManaged aesAlg = null;    // RijndaelManaged object used to encrypt the data. 

    try { 
     // generate the key from the shared secret and the salt 
     Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, Salt); 

     // Create a RijndaelManaged object 
     aesAlg = new RijndaelManaged(); 
     aesAlg.Key = key.GetBytes(aesAlg.KeySize/8); 

     // Create a decryptor to perform the stream transform. 
     ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); 

     // Create the streams used for encryption. 
     using (MemoryStream msEncrypt = new MemoryStream()) { 
      // prepend the IV 
      msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int)); 
      msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length); 
      using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { 
       using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { 
        //Write all data to the stream. 
        swEncrypt.Write(password); 
       } 
      } 
      outStr = Convert.ToBase64String(msEncrypt.ToArray()); 
     } 
    } finally { 
     // Clear the RijndaelManaged object. 
     if (aesAlg != null) 
      aesAlg.Clear(); 
    } 

    // Return the encrypted bytes from the memory stream. 
    return outStr; 
} 
+1

Base64 kodlaması, Rijndael'in ne yaptığı önemli değil, Base64 kodlamasının ne yapması gerektiği (ipucu: Base64 kodonları içermiyor) – DavidG

+0

Teşekkür ederiz. Soruyu daha iyi düzenlediniz :) – MrProgram

cevap

2

Modern şifreler, rastgele parazitlerden ayırt edilemez olması gereken ikili çıktı üretir. Bu ikili çıkışı metin olarak (ASCII, UTF-8, vb.) Yorumlarsanız, şifreli metin yeterince uzunsa, orada bir : görebilirsiniz. Ama aynı zamanda daha kısa ciphertexts için de görüyorsunuz, ama mutlaka her birinde değil. Nokta, çıktının ikili olduğu ve bir "string" olmadığıdır.

Bir dize almak için ikili çıkışı kodlamak mümkündür. Base 64 veya Hex kullanılıyorsa, : almanın bir yolu yoktur, çünkü bu onların alfabesinde değildir. Base 85 kodlamasını kullanmaya karar verirseniz, belirli bir alfabeye bağlı olarak : alabilirsiniz (ör. Z85).

+0

OP zaten Base64 kodlama, onun kodunu gör. – DavidG

+0

@DavidG Biliyorum, ama cevabımı sadece OP'nin sorusuyla sınırlamak istemiyorum. Genel olmasını istiyorum. Aksi takdirde, azar azar ve devam edecektim. –

İlgili konular