эй, поэтому в базе данных msSQL, которую я сохраняю и извлекаю из использования хранимых процедур. Я пытаюсь зашифровать некоторые данные в форме окна C# перед их размещением, а затем, конечно, расшифровать его, когда я его верну. все шифрование обрабатывается со стороны C#. Я использую пример кода для шифрования и расшифровки дословно из microsoft's tripleDESCryptoService Class (версия памяти, второй пример). Значения зашифровываются и отправляются в базу данных, но при их получении я получаю ошибку «плохих данных». образца вызова шифрования является ...C# tripleDESCrypto сохранено и получено из sql не работает
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, содержащий все нули.
благодарит за любую помощь!
Вы не должны обрабатывать tempByte как строку Unicode, даже не как строку. – pascal
TripleDES считается слабым. Вместо этого вы должны использовать AES :). – ykatchou