我正在.txt文件中编写加密(Rijndael)字节数组。 当我读出它时,我得到一个字节[48]。一旦我解密它,我得到一个字节[32]。
为什么我在这里丢失字节?如果我在控制台中写入结果,它也会在特定点切割。
static void ShowEntries()
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
path = path + @"\SafePass\";
byte[] file = File.ReadAllBytes(path + @"\crypt.txt");
using (MemoryStream memory = new MemoryStream(file))
{
using (BinaryReader binary = new BinaryReader(memory))
{
byte[] result = binary.ReadBytes(file.Length);
byte[] plainText = new byte[48];
plainText = Decrypt(result);
string SplainText = Converter(plainText);
Console.WriteLine(SplainText);
}
}
}
static string Converter(byte[] data)
{
string base64 = Convert.ToBase64String(data);
return base64;
}
static byte[] Decrypt(byte[] encryptedByte)
{
{
string password = @"mykey123"; // Your Key Here
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);
MemoryStream mem = new MemoryStream();
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(mem,
RMCrypto.CreateDecryptor(key, key),
CryptoStreamMode.Write);
cs.Write(encryptedByte, 0, encryptedByte.Length);
byte[] cipherText = null;
cipherText = mem.ToArray();
cs.Close();
return cipherText;
}
}
答案 0 :(得分:0)
假设您的输入数据(即您正在加密的数据)长度为32个字节,那么正在发生的是加密数据被填充,这意味着额外的冗余信息会被添加到加密数据中。
In .NET, the default padding mode for symmetrical algorithms like Rijndael是PKCS#7。
我认为如果你看一下加密数组中的额外数据,所有额外的值都是16(32字节输入,下一个块是48,填充是差异:48-32 = 16)。
请注意,填充字节将在解密时被删除,前提是相同的填充模式用于解密为加密。它不会影响您的数据。
但如果您真的想要,可以将填充模式设置为无,或MSDN中提到的其他值之一。
Here's a similar answer提到您也可以参考的类似问题。