のMD5で無効である私がこの暗号化された値を取得しています。このライン長さは、私は、復号誤り取得していますC#のWindowsアプリケーション
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length-1);
の「復号化するために、データの長さが無効です」 sqldatabaseを作成し、それをグリッドビューで表示する前に、暗号化された値(sqldbからの値)を復号化します。暗号化プロセスはうまくいっていますが、復号化プロセスがこの問題を引き起こしています。私が言う限りでは、データを正しく渡しているので、このエラーがどこから来ているのかわかりません。
私は、コンボボックスと日付時刻選択ツールからオプションを選択しています。自分のdataAccessレイヤーを使用して接続しています。
私のコードは以下の通りです:UTF-8など
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ReteriveGrid(comboBox1.SelectedIndex);
}
private void ReteriveGrid(int istatus)
{
DataSet ds = new DataSet();
IDBManager dbManager = new DBManager(DataProvider.SqlServer);
//SqlConnection con = new SqlConnection("connectionstyring");
dbManager.ConnectionString = ConfigurationSettings.AppSettings["SQLCN"].ToString();
dbManager.Open();
dbManager.CreateParameters(2);
dbManager.AddParameters(0, "@istatus", istatus);
dbManager.AddParameters(1, "@date", dateTimePicker1.Value.Date);
ds = dbManager.ExecuteDataSet(CommandType.StoredProcedure, "sp_Getdata");
for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
{
string DecryptText = ds.Tables[0].Rows[j][3].ToString().Trim();
MessageBox.Show(DecryptText);
//Here Call The DecryptionMethod
string AfterDecrypText = Decrypt(DecryptText,true);
MessageBox.Show(AfterDecrypText);
ds.AcceptChanges();
}
dataGridView1.DataSource = ds;
}
public static string Decrypt(string cipherString, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = Convert.FromBase64String(cipherString);
System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader();
//Get your key from config file to open the lock!(string)settingsReader.GetValue("SecurityKey", typeof(String));
string key = "Trms";
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
hashmd5.Clear();
}
else
keyArray = UTF8Encoding.UTF8.GetBytes(key);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length-1);
tdes.Clear();
return UTF8Encoding.UTF8.GetString(resultArray);
}
AFAIK、MD5はハッシュアルゴリズムであり、元に戻すことはできません(実際の値に戻すことはできません)。 –
既に暗号化された値を解読するため – raheemvali