嘿那里,所以在我使用存储过程保存和检索的 msSQL 数据库中。我试图在放置之前加密 c# windows 表单中的一些数据,然后当我将其拉回时当然会对其进行解密。所有加密都在 c# 端处理。我正在使用来自微软的 TripleDESCryptoService 类(内存版本,第二个示例)逐字加密和解密的示例代码。这些值被加密并发送到数据库,但是在检索它时我得到一个“坏数据”错误。加密调用的示例是...
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 的数组,包含全零。
谢谢你的帮助!