Хеширование конфиденциальных данных

Мне нужно зашифровать имена и логины всех пользователей в имеющейся у нас базе данных UAT. (из-за закона о защите данных)

Однако есть одна загвоздка.

Тестировщикам по-прежнему необходимо иметь возможность входить в систему, используя хешированные имена для входа.

поэтому, если логин пользователя - "Jesse.J.James", тогда хеш должен быть примерно таким

Ypois.X.Qasdf

т.е. примерно одинаковой длины, с точками в одном месте

поэтому MD5, sha1 и т. д. не подходят, поскольку они будут создавать очень длинные строки, а также добавлять свои собственные специальные символы, такие как + и =, которые не разрешены регулярным выражением проверки.

Поэтому я ищу несколько предложений, как этого добиться.

Я думаю, мне нужно свернуть свой собственный алгоритм хеширования

кто-нибудь делал что-нибудь подобное?

Я использую C#, но думаю, это не так важно для алгоритма

большое спасибо

ДОБАВЛЕН -

Спасибо за ответы на все вопросы. Думаю, я виноват в путанице, когда использовал слово «хэш», когда это не то, что нужно было делать.

Зачем им нужно иметь возможность входить в систему со своим хешем? И почему нельзя использовать + и =?

Joe Van Dyk 06.10.2008 05:17

реальные данные разрешены только в производственной системе + и = не разрешены, потому что существуют различные правила проверки, регулирующие допустимые имена входа (буквенно-цифровые символы плюс точки и апостроф

ChrisCa 06.10.2008 05:19

Вы не хешируете, вы рандомизируете. Совсем другое дело.

Tim Howland 06.10.2008 05:35

@ Тим Хоуленд: поместите это в комментарий, чтобы я мог проголосовать за него.

Thilo 06.10.2008 05:40

@Christo Fur: вы должны убрать отметку о принятом ответе с моего ответа (если можете), чтобы этот вопрос снова стал виден. Готовка еще не закончена. :) Спасибо.

Jeffrey L Whitledge 06.10.2008 09:16
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
663
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Я думаю, вы здесь ошибаетесь. Идея хэша заключается в том, что он односторонний, никто не должен иметь возможность использовать этот хеш для доступа к системе (и если они могут, то вы, вероятно, все еще нарушаете закон о защите данных. Кроме того, тестировщики не должны использовать реальные учетные записи, если эти учетные записи не являются их собственными.

У вас должны быть тестировщики, использующие фиктивные учетные записи в отдельной среде. Используя фиктивные учетные записи в отдельной среде, нет опасности предоставить тестировщикам информацию об учетной записи.

Почему бы не использовать генератор тестовых данных для данных, которые могут идентифицировать человека?

Создание тестовых данных в базе данных

Тестировщики НЕ должны входить в систему как законные пользователи. Это явно нарушило бы требование о неразглашении любого закона о защите данных, над которым вы работаете.

Система не должна позволять никому входить в систему, используя хешированное значение. Это разрушает всю цель хеширования!

Извините, я не отвечаю на ваш конкретный вопрос, но я действительно думаю, что всю вашу систему тестирования следует пересмотреть.

ДОБАВЛЕН:

Приведенные ниже комментарии JPLemme проливают свет на то, что вы делаете, и я боюсь, что я совершенно неправильно понял (как, вероятно, те, кто голосовал за меня).

Отчасти путаница связана с тем фактом, что хэши обычно используются для шифрования паролей, чтобы никто не мог узнать, что такое пароль другого человека, включая тех, кто работает в системе. Это, очевидно, неправильный контекст (и теперь я понимаю, почему вы хешируете имена пользователей, а не просто пароли). Как указал JPLemme, вы фактически работаете с полностью отдельной параллельной системой, в которую были скопированы и анонимизированы живые данные, и безопасный процесс входа в систему, использующий хешированные (и соленые!) Пароли, не будет нарушен.

В этом случае ответ WW ниже более уместен, и я рекомендую всем вместо этого отдать свои голоса ему / ей. Мне жаль, что я неправильно понял.

Вообще говоря, не рекомендуется использовать собственные алгоритмы шифрования / хеширования. Существующие алгоритмы делают то, что делают, не зря.

Неужели было бы так плохо либо дать тестировщикам путь доступа, который хеширует для них имена пользователей, либо просто заставить их копировать / вставлять хэши SHA-1?

Кому-то нужно сделать так, чтобы SO автоматически показывал предупреждение о прокрутке вашего собственного алгоритма, когда вопрос помечен шифрованием. Это удалило бы 1/3 ответов. :-P Без обид.

PhirePhly 06.10.2008 07:54

Чтобы дать вам дополнительную информацию:

Мне нужно протестировать пакет DTS, который импортирует всех пользователей системы из текстового файла в нашу базу данных. Мне будут предоставлены данные в реальном времени.

Однако, как только данные находятся в базе данных, они должны быть скремблированы, чтобы они не имели смысла для случайного читателя, но позволяли тестерам входить в систему.

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

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

Например, обновите все имена для входа и замените каждую букву другой случайной буквой.

Хеши по определению односторонние.

Если все, от чего вы пытаетесь защититься, - это случайное прочтение данных (так что уровень шифрования низкий), сделайте что-нибудь простое, например, шифр транспозиции (отображение 1-1 разных символов друг на друга - A становится J, B становится '-', так далее). Или даже просто сдвинуть все по одному (IBM становится HAL).

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

Спасибо за ответы на все вопросы. Я думаю, что вы почти наверняка правы в том, что наша стратегия тестирования ошибочна.

Я посмотрю, смогу ли я изменить мнение сильных мира сего.

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

привет - нет, это была идея, которую раздумывали. основываясь на ответах здесь и обсуждениях с другими, мы не собираемся этого делать. мы сгенерируем тестовые данные для тестирования системы

ChrisCa 06.10.2008 06:26

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