2010-03-23 2 views
5

Сценарий заключается в том, что я хочу зашифровать финансовые числа в столбце с типом данных int в таблице сервера sql. Это большое приложение, поэтому трудно изменить тип данных столбца таблицы из int в любой другой тип данных.Существует ли метод шифрования для столбца с типом данных int?

Я использую sql server 2005 и asp.net C#.

Есть ли способ двустороннего шифрования для столбца с типом данных int?

Могу ли я использовать пользовательскую функцию в SQL Server 2005 или, возможно, C#?

+0

Что именно вы хотите достичь здесь? Кажется неразумным, и я действительно не знаю, как ответить больше, чем «нет» или «да» здесь. – TomTom

+0

Я забочусь о вас в том, что у вас могут быть серьезные недостатки в области безопасности в приложении. Возможно, если вы предоставите контекст относительно того, почему вы хотите реализовать безопасность таким образом, мы можем обеспечить решение проблемы с основными причинами. –

+0

@ Джон Сансом: сценарий прост. Мы хотим, чтобы наши финансовые данные были зашифрованы в базе данных по соображениям безопасности. – Mike108

ответ

1

XOR?

:)

Хм, нужно больше текста ...

+0

XOR не так хорош, потому что одно и то же значение приведет к тому же зашифрованному значению. И «близкие» целые числа также приведут к близким значениям. (Если вы не используете другой XOR для каждой строки). – Thilo

+0

Отсюда :) после ответа. – leppie

0

Есть несколько схем два способа шифрования, доступные в .NET.

Simple insecure two-way "obfuscation" for C#

Вы можете преобразовать целое число в это байт эквивалент массива или преобразовать его в строку базы-64 и зашифровать это.

+0

Ни один из них не является FROM int TO int. Это основная проблема. В любой разумной схеме результат длинный, как ключ. Для Intreoption Int Int Int таблица замены - единственное решение, которое я могу придумать, и у этого было бы 4 миллиарда записей;) Или некоторое битрейт (например, XOR), но это вряд ли считается шифрованием. – TomTom

+0

Да. Основная проблема - «FROM int TO int». – Mike108

+0

Майк, почему бы вам это сделать? Зашифрованные данные, как предполагается, бесполезны для просмотра. В свете этого, почему вам будет интересно, какой тип зашифрованного результата? –

4

Прошу прощения, но я просто не вижу причины для шифрования чисел в базе данных. Если вы хотите защитить данные от посторонних глаз, уверен, что в SQL Server встроена защита, да?

В этом случае защитите базу данных стандартной безопасностью. Если нет, получите лучшую СУБД (хотя я был бы удивлен, если бы это было необходимо).

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

+0

Вы можете захватить файлы базы данных и изучить необработанную двоичную информацию для получения ценной информации. Это обойдет стандартную безопасность, если не будет зашифрована вся база данных, которая, как мне кажется, требует версию Enterprise. Вы можете зашифровать отдельные столбцы с помощью SQL Server, но тогда их сложно использовать с Entity Framework. –

+0

@ Я думаю, что это означает, что ваши важные серверы должны быть физически безопасными. В противном случае вы можете DOS корпорации просто уйти с ними. Точно так же сетевые пути к серверу должны быть одинаково защищены, чтобы вы не могли, например, подключиться к ним по сети. – paxdiablo

+0

По-видимому, Sony потеряла 12 700 номеров банковских карт, которые не были зашифрованы. –

0

Ну, каждый injective, surjective Функция от int до int может использоваться как способ «кодировать» целое число.

Вы можете создать такую ​​функцию, создав случайный массив с 65536 элементами без дубликатов записей и используя f(i) = a[i]. Чтобы «декодировать» ваш int, вы просто создаете другой массив с b[i] = x | a[x] = i.

Как уже упоминалось, это может быть не то, что вы действительно хотите сделать. =)

Редактировать: Отзыв Комментарий от Jim Dennis!

+0

Проблема в том, что одно и то же значение приведет к тому же зашифрованному значению. Таким образом, вы все равно можете найти пары людей с одинаковой зарплатой. – Thilo

+1

Возможно, вы сможете сделать это с дополнительной колонкой, содержащей соль. Если значения соли достаточно велики (например, 32 случайных значения), вы устраняете почти все столкновения. (Я мог бы даже иметь УНИКАЛЬНОЕ ограничение на колонку солей, выполняемую механизмом RDBMS). В целом идея здесь по-прежнему абсурдна ... но теоретически ... –

0

Возможно, вы захотите посмотреть format preserving encryption.

+0

Есть ли какой-нибудь пример кода, использующий «сохранение формата с использованием шифрования» на C# или sql? – Mike108

Смежные вопросы