プレーンテキストのパスワードフィールドを持つテーブルがあります。次に、フィールドを暗号化します。実行する方法 ?
7 に答える
MySQL にはさまざまな暗号化関数が組み込まれています。詳細な概要については、こちらを参照してください。
たとえば、AES_DECRYPT() や AES_ENCRYPT() を見たいと思うかもしれません。
INSERT INTO table (mycolumn) VALUES(AES_ENCRYPT('Hello!', 'encryption_key'));
SELECT AES_DECRYPT(mycolumn, 'encryption_key') FROM table;
データベース(データのみ)のバックアップをcsvファイルとして作成します。次のクエリを使用して、既存のフィールドをキーで更新します。
LOAD DATA INFILE 'C:/Sample.csv' INTO TABLE myTable(myname,@mypass) SET mypass=AES_ENCRYPT(@mypass,'key:test');
それがあなたの問題を解決することを願っています。
パスワードフィールドを更新して、ハッシュするパスワードを変更します。これにはSHA1を使用できます。暗号化するのではなく、パスワードをハッシュしたい。
提供されたパスワードが正しいことを確認するときは、ユーザーが提供した値をハッシュして、データベースフィールドにあるものと比較する必要があります。
パスワードをハッシュするときは、ある種のソルトを使用する必要があります。理想的には、これはユーザーごとに異なる必要があります。同様の質問には良い答えが含まれています:PHPパスワードの安全なハッシュとソルト
データの暗号化には 2 つの哲学があります。
一方向の哲学 では、元の文字列を取得できないように、アルゴリズムを使用してデータを暗号化またはハッシュします。これは、MD5 または SHA1 を使用して実行できます。
users(user,password) 値に挿入 ('userLogin', md5('myPassword') );
update users set password = sha1('myOtherPassword') where user='userLogin';
これを検証する方法は、ユーザーが指定したパスワードにメソッド (sha1 または md5) を適用し、結果のハッシュを DB に格納されているものと比較することです。
select id from users where user='userLogin' and password = sha1('passwordFromUser')
双方向の哲学 では、エンコードまたはデコードできるアルゴリズムを使用してデータを暗号化します。これは、AES_ENCRYPT() および AES_DECRYPT() で実行できます。
ユーザー (ユーザー、パスワード) の値に挿入します ('userLogin', AES_ENCRYPT('myDecodeablePass', 'myEncryptionKey'));
これを検証する方法は、保存された文字列に対して復号化メソッドを使用し、結果をユーザーが提供したパスワードと比較することです
select AES_DECRYPT(password, 'myEncryptionKey') as myDecodedPassword from users
where user='userLogin';
このように、中間者攻撃は暗号化キーを危険にさらす可能性があるため、ユーザーごとのキーでない限り、すべてのパスワードが危険にさらされる可能性があることに注意してください。
注: レインボー テーブル (または事前計算されたハッシュ テーブル) を回避するには、暗号化する文字列に辞書にないランダムな単語を挿入することをお勧めします...多くのユーザーは「password」や「123456」などの簡単なパスワードを使用する傾向があるためです。
md5またはパスワードを使用できますが、レインボーテーブルに注意してください
mysql> select md5('a');
+----------------------------------+
| md5('a') |
+----------------------------------+
| 0cc175b9c0f1b6a831c399e269772661 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> select password('a');
+-------------------------------------------+
| password('a') |
+-------------------------------------------+
| *667F407DE7C6AD07358FA38DAED7828A72014B4E |
+-------------------------------------------+
1 row in set (0.00 sec)
パスワードを一方向に暗号化し、ダムテキストを追加するだけの人もいます、IE
「Hello」を暗号化し、MD5 を使用するとします。次のようにします。
mysql> select password('dumbtext Hello');
+-------------------------------------------+
| password('dumbtext Hello') |
+-------------------------------------------+
| *1F2CE4EA3F6F689369453F090A660A9D0314AD90 |
+-------------------------------------------+
1 row in set (0.00 sec)
次に、セッションを検証する場合は、ユーザーがフォームの入力フィールドで使用するパスワードを一致させるだけです。
if (md5("dumptext". user(password_input))== データベースのフィールドの場合、Session ON!. if not Reject
これがMysqlパスワードの暗号化情報です。さまざまなオプションがあり、それはあなた次第です
あなたの投稿につまずいたのは、私があなたと同じ問題を抱えていたからですが、どういうわけかそれを理解しました. 最初にテーブルを作成し、暗号化せずにデータを挿入しました。後で、mysql でデータを暗号化する方法があることを発見しましたが、クエリと md5()、sha()、sha1 を使用した場合のみです。 ()、sha2() などなど。
これが私がしたことです。
現在のテーブルと同一の別のテーブルを作成する必要があります (ただし、もちろんテーブル名は異なります)。
INSERT INTO users_new(userID, password) SELECT userID, sha1(password) FROM users;
Now note that these are two different tables (users and users_new) these tables have identical column names and characteristics. The command copies the value of the userID and an encrypted (using the sha1() function) password into the table users.
Remember to make the column password to be of type VARCHAR(40) because the decrypted character length is 40bytes(characters) long.
Hope this was helpful. Post you comment or leave a reply.
more Grace to you.