Версия Informix для SQL SERVER 2008 ENCRYPT_TDES - PullRequest
1 голос
/ 06 января 2012

У нас есть приложение, которое использовало функцию informix ENCRYPT_TDES. Я обнаружил, что SQL SERVER имеет функцию с именем ENCRYPTBYPASSPHRASE, которая также использует TDES. Тем не менее, результаты очень разные. SQL SERVER один возвращает varbinary, а Informix один возвращает строку BASE64.

Вот пример оператора Informix:

SELECT encrypt_tdes('12345CF','thepassword') from sometable

Пример результата:

18A//AAAACA150blzB2/uXYO8vtaqBZpg==

Вот что я сделал с SQL SERVER 2008 (но не совместим с расшифровкой Informix и наоборот):

DECLARE @bin AS VARBINARY(256)
SET @bin = ENCRYPTBYPASSPHRASE('thisisthepassword', '12345CF')
select CAST(N'' AS XML)
    .value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))', 'VARCHAR(MAX)')

Пример результата:

AQAAAOVcL3PwM28dUENp1JF845auaRH9loIrDA==

Я предполагаю, что моя проблема, возможно, связана с кодированием. Тем не менее, я не могу понять эту проблему. Если это невозможно с помощью встроенных функций MS SQL, кто-нибудь из вас знает код VB.NET, который может шифровать и возвращать совместимую строку с Informix, чтобы я мог добавить DLL-библиотеку .NET и использовать ее в своем запросе MS SQL.

Спасибо за любую помощь!

РЕДАКТИРОВАТЬ: Может кто-нибудь помочь мне найти способ имитировать функцию Informix ENCRYPT_TDES в C # или VB.NET?

1 Ответ

1 голос
/ 07 января 2012

Ключи, указанные в EncryptByPassPhrase или CREATE SYMMETRIC KEY, используются только в качестве начальных чисел для генерации фактических ключей (я не знаю алгоритм, который они используют, но я представляю что-то вроде Rfc2898DeriveBytes).

Возможно, вы сможете продублировать логику Informix в C # и, возможно, поместить ее в функцию SQL CLR. Судя по комментариям, алгоритм может состоять в том, чтобы просто вычислить хэш SHA-1 данного пароля и использовать его в качестве фактического ключа. См SHA1CryptoServiceProvider и System.Security.Cryptography.TripleDESProvider.

...