私は次のコードを使用していくつかのプレーンテキストを暗号化/復号化しています。
private static string EncryptionKey = "@#$%^&*()2343";
private static byte[] Salt = Encoding.ASCII.GetBytes(EncryptionKey.Length.ToString());
public static string EncryptIt(string Input)
{
RijndaelManaged Cipher = new RijndaelManaged();
byte[] TextByteArray = Encoding.Unicode.GetBytes(Input);
PasswordDeriveBytes Key = new PasswordDeriveBytes(EncryptionKey, Salt);
using (ICryptoTransform Transform = Cipher.CreateEncryptor(Key.GetBytes(32), Key.GetBytes(16)))
{
using (MemoryStream MS = new MemoryStream())
{
using (CryptoStream CS = new CryptoStream(MS, Transform, CryptoStreamMode.Write))
{
CS.Write(TextByteArray, 0, TextByteArray.Length);
CS.FlushFinalBlock();
return Convert.ToBase64String(MS.ToArray());
}
}
}
}
public static string DecryptIt(string Input)
{
RijndaelManaged Cipher = new RijndaelManaged();
byte[] EncryptedByteArray = Convert.FromBase64String(Input);
PasswordDeriveBytes Key = new PasswordDeriveBytes(EncryptionKey, Salt);
using (ICryptoTransform Transform = Cipher.CreateDecryptor(Key.GetBytes(32), Key.GetBytes(16)))
{
using (MemoryStream MS = new MemoryStream(EncryptedByteArray))
{
using (CryptoStream cryptoStream = new CryptoStream(MS, Transform, CryptoStreamMode.Read))
{
byte[] TransformedText = new byte[EncryptedByteArray.Length];
int Count = cryptoStream.Read(TransformedText, 0, TransformedText.Length);
return Encoding.Unicode.GetString(TransformedText, 0, Count);
}
}
}
}
ほとんどの場合、このコードは正常に機能します。byte[] EncryptedByteArray = Convert.FromBase64String(Input)
ただし、暗号化されたテキストを復号化しようとすると、メソッドで呼び出されたときに次の例外が発生する場合がありDecryptIt
ます。
入力は、非Base 64文字、3つ以上のパディング文字、またはパディング文字の間に非空白文字が含まれているため、有効なBase-64文字列ではありません。
この例外の原因となる可能性のあるアイデア。私がもっと困惑しているのは、なぜこの例外がすべてのケースに投げられるのではなく、ほんのわずかなケースに投げられるのかということです。
編集: 例外をスローするDecryptItメソッドへのサンプル入力は以下のとおりです。上記のサンプルでEncryptionKey変数の値を変更したことに注意してください。
oaOQ6qWWDwWby3C04N7HJAiqQgILBifqdHq4OQ5KDDRA3F2ZlBITu31a8mJJQ8sKn4g3vODFEJbigtNZozv6ockAdsDChhHwaaLL4l8MJPKbV1EiUE3rL30y + xHz / S1a8mJJQ8sKn4g3vODFEJbigtNZozv6ockAdsDChhHwaaLL4l8MJPKbV1EiUE3rL30y +オンス/ eR9OzXn + 3Lepo0tRqH5BsfvEtJ / IcqRu3gJiIBTMAM0TmVxa2EZSj2mn6jZlgvlOEFCWzNKS3R9OzXn + In1br14venJmpApXyt930khz35UE5BtWn3Fq7jyer6mY2l60P / cI4z