Encryption/Decryption 没有返回数据的原始长度
Encryption/Decryption not Returning Original Length of Data
我不明白为什么下面的代码会失败。
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;
}
具体来说,从 Decrypt(byte[], out byte)
返回的 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();
}
}
BitConverter.GetBytes
方法不提供采用 byte
的重载。我的猜测是它将它提升为(2 字节)ushort
然后对其进行加密,因此在解密时得到 2 字节的结果。
我不明白为什么下面的代码会失败。
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;
}
具体来说,从 Decrypt(byte[], out byte)
返回的 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();
}
}
BitConverter.GetBytes
方法不提供采用 byte
的重载。我的猜测是它将它提升为(2 字节)ushort
然后对其进行加密,因此在解密时得到 2 字节的结果。