そうですね、msSQLデータベースでは、ストアドプロシージャを使用して保存および取得しています。配置する前にc#Windowsフォームで一部のデータを暗号化しようとしていますが、もちろん、データをプルバックするときに復号化しています。すべての暗号化はC#側で処理されています。マイクロソフトのtripleDESCryptoServiceクラス(メモリバージョン、2番目の例)の暗号化と復号化のサンプルコードをそのまま使用しています。値は暗号化されてデータベースに送信されますが、値を取得すると「不正なデータ」エラーが発生します。暗号化呼び出しのサンプルは...
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();
byte[] tempByte = new byte[100];
tempByte = encrypt(txt_Last_Name.Text, tDESalg.Key, tDESalg.IV);
txt_Last_Name.Text = System.Text.ASCIIEncoding.ASCII.GetString(tempByte);
次に、txt_Last_Nameがデータベースに送信され、データベースに何かがあることがわかります。データベースでは、名前はvarchar(20)タイプです。
復号化呼び出しのサンプルは...
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();
string lastName = dr.GetString(dr.GetOrdinal("Last Name"));
if (isEncrypted)
{
byte[] toDecrypt = new ASCIIEncoding().GetBytes(lastName);
lastName = decrypt(toDecrypt, tDESalg.Key, tDESalg.IV);
}
txt_Last_Name.Text = lastName;
「csDecrypt.Read(fromEncrypt、0、fromEncrypt.Length);」で復号化関数を爆撃します。理由がわかりません。データベースに正しく保存されていないのか、変換が正しくないのかわかりません。
それが何かを意味する場合、復号化関数に入る「データ」はサイズ16であり、ゼロ以外の値を含みますが、「byte[]fromEncrypt」はすべてゼロを含むサイズ16の配列です。
助けてくれてありがとう!