Не понимаю, почему приведенный ниже код не работает.Шифрование/Расшифровка не возвращает исходную длину данных
public string Encrypt(System.Byte value)
{
return Convert.ToBase64String(Encrypt(BitConverter.GetBytes(value)));
}
public bool Decrypt(string encryptedValue, out System.Byte value)
{
byte[] data = Decrypt(Convert.FromBase64String(encryptedValue));
if (data.Length != sizeof(System.Byte)) // <===== THIS IS TRUE!!!
{
value = default(System.Byte);
return false;
}
value = data[0];
return true;
}
В частности, byte
массив, возвращаемый из Decrypt(byte[], out byte)
имеет длину 2 байта, вместо ожидаемого 1 байт в длину.
Обратите внимание, что второй байт всегда равен нулю, а первый байт имеет правильное значение. Поэтому я могу заставить код работать, просто беря первый байт. Но кто-нибудь знает, почему я получаю дополнительный байт. Я предполагаю, что это может быть связано с Convert.FromBase64String
.
Ниже приведены мои базовые методы Encrypt
и Decrypt
.
public virtual byte[] Encrypt(byte[] data)
{
using (Rijndael algorithm = Rijndael.Create())
using (ICryptoTransform encryptor = algorithm.CreateEncryptor(Key.KeyString, Key.KeyBytes))
{
MemoryStream ms = new MemoryStream();
using (Stream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(data, 0, data.Length);
}
return ms.ToArray();
}
}
public virtual byte[] Decrypt(byte[] data)
{
using (Rijndael algorithm = Rijndael.Create())
using (ICryptoTransform decryptor = algorithm.CreateDecryptor(Key.KeyString, Key.KeyBytes))
{
MemoryStream ms = new MemoryStream();
using (Stream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
{
cs.Write(data, 0, data.Length);
}
return ms.ToArray();
}
}
Почему 'data.Length == sizeof (byte)'? sizeof, вероятно, возвращает 1 все время ... –
Для этого метода он должен всегда возвращать 1, потому что это размер дешифрованных данных (байт). –