2013-08-23 2 views
0

Я использую пароль не только для входа в систему, но и для шифрования. И пароль signIn зашифрован md5. Если я потерял/забыл пароль. Как я могу расшифровать мои данные?сбрасывание пароля и шифрование-дешифрование в php

например. пользователь вводит пароль с паролем = 1234. , если он подписан => расшифровать данные, используя этот пароль.

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

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

Thank.

+2

По определению вы не можете дешифровать правильно зашифрованные данные, если вы потеряли пароль. Единственный способ для этого - то, что * вы * сохраняете фактический пароль на сервере. Но тогда ТНО (поверьте не один) безопасности не является спорным. Либо пользователь контролирует свои данные, и тем самым также несет всю ответственность, или * вы делаете. – deceze

+0

Вы не можете. Если вы используете что-то в качестве ключа для правильного шифрования/дешифрования данных и потери этого ключа, тогда эти данные бесполезны, и вам необходимо повторно захватить данные и повторно зашифровать их с помощью нового пароля. Также не используйте md5 для хранения хэшей паролей. См. Примечание о хешировании паролей с помощью md5 на странице [md5() man) (http://php.net/manual/en/function.md5.php) – Anigel

+0

, если некоторые только изменят пароль, который вы можете запросить у старого пароля до а затем дешифровать с помощью старого пароля и снова зашифровать с помощью нового. – Christoph

ответ

1

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

В этом конкретном случае вы можете попытаться перенаправить MD5ed копию пароля. MD5 is very weak, and unsuitable for storing hashed passwords.

+0

Hello Quentin, Благодарим за быстрый ответ. Если вы хотите предложить другой подход? Правило: «пользователь может вставлять ключ шифрования». ключ crypt не будет храниться в базе данных. – user2710326

+0

Как насчет вопросов безопасности или электронной почты пользователя? Любые соглашались? – user2710326

+0

Какое использование вопросов безопасности было бы? Они могут использоваться, чтобы помочь определить, следует ли вам вводить новый ключ пользователю ... но у вас нет способа создать новый ключ. – Quentin

0

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

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

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

Шифрование данных довольно большого шага. Пользователь никогда не может быть уверен, что вы ничего не делаете с данными, поскольку вы являетесь тем, кто предоставляет (веб-приложение). Мысль о том, что пользователь не может вам доверять, является, таким образом, противоречием. Вероятно, стоит дороже подумать о безопасности данных от атаки (защита базы данных), защиты от кражи и т. Д.

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

  • Нет связанных вопросов^_^