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);
}
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. –
Również "char" w C# ma 16 bitów. –