Моя организация решила зашифровать определенные данные в нашей базе данных, и мне было поручено реализовать шифрование.Мне нужно иметь возможность зашифровать данные, сохранить зашифрованную версию в поле VARCHAR в нашей базе данных, а затем извлечь и расшифровать ее до ее обычного состояния.
На первый взгляд это кажется простой задачей,Существует несколько способов реализации шифрования.Один из них, который я использовал ранее, основан на коде шифрования AES, найденном в в этом вопросе StackOverflow .
Что в этом случае затрудняет то, что мне нужно написать код для шифрования / дешифрованияданные в различных приложениях, которые обращаются к нашей базе данных, некоторые из которых разработаны с использованием различных технологий.У нас есть приложения, написанные на Coldfusion 5, на Classic ASP и на ASP.NET 2.0.Мне нужно иметь возможность зашифровать данные и сохранить их в базе данных с помощью кода Coldfusion, а затем прочитать и расшифровать их в исходном виде в ASP.NET.Или зашифруйте его в Classic ASP и расшифруйте в Coldfusion.Или любая другая комбинация этих платформ.
Это оказалось сложнее, чем я ожидал.Разные классы / объекты / функции / библиотеки, которые утверждают, что используют одни и те же алгоритмы, по-видимому, дают разные результаты, даже если даны одни и те же данные и один и тот же общий секрет.В прошлом мы использовали CAPICOM для обеспечения взаимодействия шифрования между Coldfusion и Classic ASP.Но я столкнулся с проблемой, пытаясь заставить это работать в ASP.NET.Я прочитал эту статью о том, как заставить CAPICOM работать в .NET , но эти предложения не сработали для меня.Я даже не могу создать класс взаимодействия или импортировать ссылку на COM-объект без ошибки.Кроме того, некоторые из наших производственных серверов имеют операционные системы, которые, по-видимому, не совместимы с CAPICOM, так что в любом случае это может быть тупик.
Есть ли у кого-нибудь какие-либо предложения относительно того, как я могу реализовать шифрование в такой ситуации?каким образом любая из 3 платформ может расшифровать то, что зашифровали другие, при этом используя достаточно сильный алгоритм?
Редактировать 2011-12-29:
КакКак отмечается в комментариях ниже, в настоящее время я надеюсь найти решение ASP.NET, которое совместимо с некоторыми из наших существующих кодов Coldfusion / ASP Classic, использующих CAPICOM.Причина этого в том, что наш руководитель группы не хочет, чтобы я ввел новый метод шифрования в наш код для нашей текущей цели, если только я не пересмотрю наши старые приложения, использующие шифрование для другой цели, чтобы использовать тот же метод.Он хочет использовать один и тот же метод шифрования для обеих целей.Поскольку пересмотр старых приложений для использования нового метода шифрования означает не только изменение кода, но и отслеживание всех данных, зашифрованных старыми приложениями, их расшифровку и повторное шифрование с использованием нового метода, поэтому я не решаюсьэтот маршрут, если я не должен.Надеюсь, я найду способ заставить ASP.NET читать существующие зашифрованные данные.
Зашифрованные данные из других наших приложений Coldfusion и ASP Classic были закодированы с использованием COM-объекта CAPICOM.Насколько я могу судить, в качестве универсальных настроек использовалось шифрование AES, максимальный размер ключа (который, как мне кажется, 256-битный в AES).
По запросу @Leigh приведен упрощенный пример того, как наши существующиеПриложения CF используют CAPICOM:
<cfscript>
encryptObject = CreateObject("com","CAPICOM.EncryptedData");
encryptObject.Algorithm.Name = 4; // 4 is AES
encryptObject.Algorithm.KeyLength = 0; // 0 is MAX, I believe 256-bit in the case of AES
encryptObject.SetSecret(sharedSecret);
encryptObject.Content = stringToEncrypt;
encryptedData = localScope.encryptObject.Encrypt();
</cfscript>