ええと、質問は実際には非常に良いものです。ただし、この種の問題が発生しないようにする方法が 1 つあります。しかし、最初に、ハッシュと暗号化の違いを明確にしたいと思います
ハッシュとは、サブジェクトを長いハッシュに変換することです。これを元に戻すことは非常に難しく、それを行うには多くのリソースが必要です。私たちは通常、パスワードなどをハッシュします暗号化は、データを安全に保存したいが、それを取り戻すことができるようにしたい場合です。それを別の長いものに変換しますが、簡単に元に戻すこともできます (キーがわかっている場合)
「ソルト」と呼ばれるものを使用して、パスワードなどのハッシュを保護できます。ハッシュ(x)はハッシュ(x+y)とは大きく異なることがわかっているため、それを使用できます。私があなただったら MD5 を使用しませんが、それでも素晴らしいですが、衝突が見られます (多くのハッシュ アルゴリズムには衝突がありますが、発見されるとセキュリティが低下します)。sha256/sha512 を使用することをお勧めします。それらは非常に安全であり、これまでのところ既知の衝突は見られていません.
私はオタクですが、あなたの問題は非常に単純です。この例では、phpのハッシュ関数を使用します。ユーザー名は一意であると言ったので、これを非常に安全なハッシュシステムに使用できます
$password = YOUR_PASSWORD_HERE;
$username = USERNAME_OF_USER;
$safe_hash = hash("sha512",$password.$username);
これにより、2 つのユーザー名とパスワードがマージされ、sha512 アルゴリズムでハッシュされます (必要に応じてアルゴリズムを変更してください)。これは、'password'.'user1' が 'password'.'user2' とは異なる一意のハッシュを持っているため、非常に安全です。
さらに安全にしたい場合は、作成時間、姓、名、携帯電話番号、電子メール、作成時間など、知っているもの、できれば本当に一意のものを追加できます.
データの暗号化については(必要に応じて元に戻すことができるように)、mcrypt を使用できます。mcrypt_encryptとmcrypt_decryptを使用できます。使用する暗号と、使用するモードを指定できます。その後、データを元に戻したい場合は、mcrypt にキー、アルゴリズム、モード、および mcrypt_encrypt が提供した無意味な出力を再度与えると、元のデータが得られます。
ハッシュをリバース エンジニアリングするのは非常に難しいため、ハッシュを使用して非常に安全なキーを使用することをお勧めします。sha-256 ハッシュを適切で一意の文字列と共に使用すると (ハッシュ文字列に複数のデータを混在させることをお勧めします)、必要なデータを保護するのに役立ちます。