EncryptByPassPhrase в SQL Server и Triple DES расшифровываются в C # - PullRequest
2 голосов
/ 22 ноября 2011

Контекст:

  • данные хранятся в SQL Server.Некоторые поля зашифрованы с использованием EncryptWithPassPhrase

update my_table set my_field = EncryptByPassPhrase('012345678901234567890123','some value')

  • выборка данных с использованием NHibernate.Зашифрованные данные декодируются с использованием Interceptor

    public static string Decrypt(byte[] toDecryptArray, string key)
    {
        byte[] keyArray;
    
        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(toDecryptArray, 0, toDecryptArray.Length);
    
        return UTF8Encoding.UTF8.GetString(resultArray);
    }
    

Сбой при cTransform.TransformFinalBlock, говоря «Длина данных для расшифровки недопустима».

Что не так с моим кодом?Данные шифруются / дешифруются одним и тем же ключом (012345678901234567980123).

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

Я не узнал, как расшифровать кодом C # то, что было зашифровано с помощью функции T-SQL EncryptByPassPhrase .

Но SQL Server 2005 позволяет вам создавать сборку C # и загружать ее в SQL Server, а затем создавать хранимые процедуры или функции или ваши методы C #. Таким образом, я создал «мою» EncryptByPassPhrase функцию с общим кодом между приложением и SQL Server, чтобы я мог шифровать / дешифровать с обеих сторон.

0 голосов
/ 04 марта 2013

В документации говорится о парольной фразе:

"Переменная типа nvarchar, char, varchar, binary, varbinary или nchar, содержащая ключевую фразу , из которой можно сгенерировать симметричный ключ."

http://msdn.microsoft.com/en-us/library/ms190357.aspx

Поэтому причина, по которой вы не можете расшифровать его в C #, заключается в том, что вам нужно использовать производный ключ, а не саму парольную фразу. Хотя я не знаю, как вы получили ключ.

...