Как зашифровать пароль для сохранения его позже в базе данных или текстовом файле?

Я пишу bash-скрипт, который удаляет сервис из docker-compose.yml. Основная идея состоит в том, чтобы читать docker-compose.yml построчно и сравнивать строку с началом объявления сервиса. Строки помещаются во временный файл до тех пор, пока не будет найдено объявление сервиса. Как только объявление службы найдено, скрипт перестает печатать строки во временном файле. Когда сценарий следующего объявления службы найден, он снова начинает печатать строки во временном файле. После этого временный файл копируется в исходный файл.

#!/bin/bash

SERVICE_NAME=$1
tmp=$(mktemp)

service_start_regex="^\s{3}$SERVICE_NAME:\s*$"
next_service_start_regex="^\s{3}[a-zA-Z0-9_]+:\s*$"

state="loud"
while IFS= read -r line; do
    if [[ "$line" =~ $service_start_regex ]]; then
        state="silent"
    fi

    if [[ "$line" =~ $next_service_start_regex && ! "$line" =~ $service_start_regex && "$state" == "silent" ]]; then
        state="loud"
    fi

    if [[ $state == "loud" ]]; then
        printf "%s\n" "$line"
    fi
done < ./docker-compose.yml > "$tmp" && mv "$tmp" docker-compose.yml
9
задан Community 23 May 2017 в 12:18
поделиться

14 ответов

Читатели StackOverflow не знают, как записать схемы безопасного пароля и Вы тоже. Если Вы собираетесь сделать это, сэкономьте время, придерживаясь простого текста. От Достаточно С Таблицами Радуги: Что Вы Потребность Знать О Схемах Безопасного пароля:

Таблицы радуги легко разбить. Для каждого пароля генерируйте случайное число (данный случай). Хешируйте пароль с данным случаем и сохраните и хеш и данный случай. Сервер имеет достаточно информации для проверки паролей (данный случай хранится в ясном). Но даже с маленьким случайным значением, скажем, 16 битов, таблицы радуги неосуществимы: существует теперь 65 536 “вариантов” каждого хеша, и вместо 300 миллиардов записей в таблице радуги, Вам нужны квадрильоны. Данный случай в этой схеме называют “солью”.

Прохладный, ха? Да, и склеп Unix — - почти наименьший общий знаменатель в системах безопасности — - имел эту функцию с 1976. Если это - новости Вам, Вы не должны разрабатывать системы пароля. Используйте чужой хороший.

Используйте BCrypt - Хеширование Сильного пароля для.NET и Моно. Это - единственный чисто записанный .cs файл, который продолжит удовлетворять Ваши потребности, поскольку компьютеры взламывания пароля становятся быстрее.

23
ответ дан 4 December 2019 в 05:56
поделиться

Вот является строковая статья шифрования с примером кода.NET

http://www.devarticles.com/c/a/VB.Net/String-Encryption-With-Visual-Basic-.NET/3/

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

-3
ответ дан 4 December 2019 в 05:56
поделиться

Кратко:

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

Зашифруйте пароль + случайное число с алгоритмом шифрования как SHA1, большинство языков программирования имеет платформу криптографии.

Сохраните хешированный пароль.

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

-3
ответ дан 4 December 2019 в 05:56
поделиться

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

Если с другой стороны, необходимо сохранить пароль, чтобы смочь получить его и предоставить его к некоторой другой услуге аутентификации позже, то Вы могли бы хотеть сохранить зашифрованный. В этом случае используйте любой достойный симметричный алгоритм шифрования, Вы можете, такие как TripleDES или AES или Шифр.

0
ответ дан 4 December 2019 в 05:56
поделиться

Как ocdecio я использовал бы TripleDes, я также сохраню соль в базе данных также. Ключ для меня обычно трудно кодируется, но соль должна измениться для каждого зашифрованного объекта.

0
ответ дан 4 December 2019 в 05:56
поделиться

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

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

0
ответ дан 4 December 2019 в 05:56
поделиться

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

Причина того, что не использовалось 2 дорожного шифрования состоит в том, что нельзя дешифровать Ваш ключ - так как хороший hashfunction имеет коллизии.

1
ответ дан 4 December 2019 в 05:56
поделиться

Лично, я использовал бы что-то, что имеет одностороннее шифрование - MD5, SHA1, и т.д...

Можно использовать класс FormsAuthentication с, он - метод HashPasswordForStoringInConfigFile. При проверке пользователя зашифруйте введенный пароль и сравните его с сохраненной версией.

1
ответ дан 4 December 2019 в 05:56
поделиться

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

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

В этом случае, идущий, используя алгоритм, который не обратим (Хеширование), был бы Ваш лучший выбор. Необходимо будет удостовериться в нескольких вещах:

  1. Удостоверьтесь, что соединение шифруется при передаче пароля от клиента к серверу. Это будет препятствовать тому, чтобы он пронюхался. Это довольно тривиально, чтобы сделать с веб-приложениями, так как веб-сервер делает тяжелый подъем для Вас. Если не это получает много tricker и является предметом целого другого вопроса.

  2. Выберите твердый алгоритм хеширования для предотвращения коллизии. Я рекомендовал бы SHA-256, даже если он действительно обеспечивает больший результат, чем SHA1 или MD5. Ссылка от Microsoft при использовании их реализации алгоритма здесь.

  3. Посолите пароль для предотвращения нападений, использующих rainbowtable (т.е. ищущих пароль в большой таблице с предварительно вычисленным хешем и связанный пароль в открытом тексте). Ответ здесь (расположенный в Вашем вопросе) дает хороший псевдо код в Python о том, как сделать это. Существует также хороший пример кода.NET здесь.

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

Этот случай легок, если мы только говорим о хранении пароля (или какой-либо вид уязвимой информации) на одиночном компьютере (сервер). Если это так, использование Microsoft Data Protection API было бы хорошим решением, так как это связывается с тем компьютером и (в зависимости от способа, которым Вы работаете), пользователь, при котором Вы выполнение приложения и заботится о худшем из задания для Вас (создание, хранение и использование ключей). Можно найти некоторую ссылку кода от Microsoft здесь. Если Вы нуждаетесь в нем больше чем в одной системе и не готовы ввести пароль в каждой системе, Вы устанавливаете на своем приложении затем, вещи становятся намного более сложными, потому что необходимо реализовать многое из него с нуля. Это было бы предметом для другого вопроса, я буду думать.

2
ответ дан 4 December 2019 в 05:56
поделиться

Используйте Защиту данных API или с пользователем или с хранилищем машины (например, другой ключ на учетную запись Ваши выполнения программы/сервера базы данных под по сравнению с одним ключом на машину). Это поможет Вам декодировать пароли позже, и Вы не должны помнить или сохранить любые ключи шифрования. Оборотная сторона его - то, что при переустановке системы/удалять учетная запись, Вы не сможете восстановить данные, я верю.

8
ответ дан 4 December 2019 в 05:56
поделиться

При использовании шифрования для того, чтобы надежно сохранить пароли необходимо будет сохранить шифрование "ключ" где-нибудь, также. Это будет "слабым звеном", с тех пор если кто-то овладеет ключом шифрования, то они смогут дешифровать зашифрованные пароли.

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

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

Посмотрите следующие ссылки для дальнейшей информации: Хеширование Пароля с Солью

Для шифрования (если бы необходимо использовать это), я использовал бы Rijndael (AES).

4
ответ дан 4 December 2019 в 05:56
поделиться

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

Это не прекрасно, каким-либо образом, но это - способ, которым 99,999% людей хранит их пароли.

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

9
ответ дан 4 December 2019 в 05:56
поделиться

Если необходимо дешифровать пароль для более позднего использования, и это не должно быть СУПЕР безопасно, затем использовать метод здесь:

http://support.microsoft.com/kb/307010

Это хорошо документируется и легкое понять.

2
ответ дан 4 December 2019 в 05:56
поделиться

BCrypt - Хеширование сильного пароля для.NET и моно

15
ответ дан 4 December 2019 в 05:56
поделиться