私は自分のデータをMySQLで暗号化してBLOBとして保存し、C#で復号化する必要がありますが、期待した結果が得られません。MySQLでの暗号化、C#での復号化
MYSQLでBLOB:
これは私の結果である:
それはちょうどPD001KY6900430
ここに私のコードは、C#で
ますする必要がありますここはMKEY方法であって、ここで
Encoding winLatinCodePage = Encoding.GetEncoding(1252);
byte[] key = Encoding.UTF8.GetBytes(skey);
byte[] k = new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
for (int i = 0; i < key.Length; i++)
{
k[i % 16] = (byte)(k[i % 16]^key[i]);
}
return k;
decrypt_function方法である:
RijndaelManaged Crypto = null;
MemoryStream MemStream = null;
ICryptoTransform Decryptor = null;
CryptoStream Crypto_Stream = null;
StreamReader Stream_Read = null;
string Plain_Text;
try
{
Crypto = new RijndaelManaged();
Crypto.Key = Key;
Crypto.Mode = CipherMode.ECB;
Crypto.Padding = PaddingMode.None;
MemStream = new MemoryStream(Cipher_Text);
Crypto.GenerateIV();
//Create Decryptor make sure if you are decrypting that this is here and you did not copy paste encryptor.
Decryptor = Crypto.CreateDecryptor(Crypto.Key, Crypto.IV);
//This is different from the encryption look at the mode make sure you are reading from the stream.
Crypto_Stream = new CryptoStream(MemStream, Decryptor, CryptoStreamMode.Read);
//I used the stream reader here because the ReadToEnd method is easy and because it return a string, also easy.
Stream_Read = new StreamReader(Crypto_Stream);
Plain_Text = Stream_Read.ReadToEnd();
}
finally
{
if (Crypto != null)
Crypto.Clear();
MemStream.Flush();
MemStream.Close();
}
return Plain_Text;
私に私が作った間違いをご提示ください。
パディングを削除しようとしましたが、列accNoのために結果が期待どおりですが、別の列、アドレス、エラーでエラーが発生しました: "埋め込みが無効ですnは削除できません" –
修正:もし私が削除すると、 "Crypto.Mode = CipherMode.ECB; Crypto.Padding = PaddingMode.None;、accNo列の場合でも、 エラーが直ちに表示されます。"埋め込みが無効で削除できません " –
なぜCipherModeを削除していますか? ECB'? 「accNo」に関するデータを提供する。 – zaph