Подходящая альтернатива CryptEncrypt

У нас есть ситуация в нашем продукте, когда в течение долгого времени некоторые данные хранились в базе данных приложения в виде строки SQL (на выбор MS SQL server или sybase SQL в любом месте), которая была зашифрована с помощью функции Windows API CryptEncrypt. (прямой и дешифруемый )

Проблема в том, что CryptEncrypt может генерировать NULL на выходе, что означает, что когда он сохраняется в базе данных, манипуляции со строкой в ​​какой-то момент усекают CipherText.

В идеале мы хотели бы использовать алгоритм, который будет генерировать CipherText, который не содержит NULL, поскольку это вызовет наименьшее количество изменений в существующих базах данных (изменение столбца со строки на двоичный и код для работы с двоичным кодом вместо строк) и просто расшифруйте существующие данные и повторно зашифруйте с помощью нового алгоритма во время обновления базы данных.

Алгоритм не обязательно должен быть максимально безопасным, так как база данных уже находится в достаточно безопасной среде (не в открытой сети / межсетях), но должен быть лучше, чем ROT13 (который я могу почти расшифровать в своей голове. сейчас же!)

изменить: кстати, какая-либо конкретная причина для изменения зашифрованного текста на зашифрованный текст? зашифрованный текст кажется более широко используемым ...

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
741
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Любой полуприличный алгоритм в конечном итоге с большой вероятностью сгенерирует значение NULL где-нибудь в результирующем зашифрованном тексте.

Почему бы не сделать что-то вроде кодировка base-64 полученного двоичного объекта перед сохранением в БД? (пример реализации на C++).

Интересный маршрут OJ. Мы смотрим на осуществимость необратимого метода (все еще следя за тем, чтобы мы явно не извлекали данные для дешифрования), например. просто сохраните хеш для сравнения при отправке

Хранение хеша - хорошая идея. Однако, пожалуйста, обязательно прочтите Джеффа Вероятно, вы неправильно храните пароли.

Похоже, что разработчик, занимающийся этим, собирается обернуть существующее шифрование с помощью yEnc, чтобы сохранить целостность таблицы, поскольку данные должны быть извлечены, и это избавит от всей этой беспорядочной игры с бесконечным-невероятным .... эээ, изменение типов столбцов на закрепленные установки. Ура, ребята

Другие вопросы по теме