السلام عليكم ورحمة الله وبركاته ...
أريد أن أوضح كيفية حفظ البيانات مشفرة بداخل القواعد MySQL … أي كيف نقوم مثلاً بعمل جدول خاص بالمستخدمين وكل مستخدم تكون الكلمة السرية له مشفرة … كيف يمكن فعل ذالك
هناك ثلاث طرق تسخدم في تشفير البيانات في قاعده البيانات MySQL:
الأولى بإستعمال التشفير (أو Hash) المعروفة MD5
الثانية بإستعمال التشفير (أو Hash) المعروفة SHA1
الثالثة بإستعمال التشفير AES، حيث يستعمل 128 بت.
ملاحظة: هناك طرق أخرى ولكن موضوعي يشرح الثلاث طرق أعلاه فقط ....
الطريقه الاولي :
التشفير باستخدام MD5 :
الآن لنرى كيف نقوم بعمل ذلك … سنبدأ مع طريقة MD5 … قم بالبداية بإنشاء جدول على أن يكون حجم حقل الكلمة السرية بـ 32 حرف/رمز/رقم، كما يلي:
CREATE TABLE user_md5 (
username VARCHAR(16), password VARCHAR(32)
);
قمنا بعمل جدول يتكون من حقلين، حقل يخص اسم المستخدم وحقل يخص الكلمة السرية له …
الآن لنقوم بإضافة بيانات تجريبية له، مثلاً أسم مستخدم binary وكلمة سرية له ولتكن binary أيضاً … نقوم بذلك كالآتي:
mysql> INSERT INTO user_md5 VALUES ('binary',MD5('binary') );
Query OK, 1 row affected (0.03 sec
كما تلاحظون أستعملنا الدالة MD5 عند إدخالنا للكلمة السرية، وذلك لكي يتم تشفيرها بواسطة MD5 …
الآن لنقوم بعرض المدخلات وهل تم تشفيرها أم لا، نفذ الأمر التالي:
mysql> SELECT * FROM user_md5 where username = 'binary' AND password=MD5('binary');
+-----------+----------------------------------+
| username | password |
+-----------+----------------------------------+
| binary | 9d7183f16acce70658f686ae7f1a4d20 |
+-----------+----------------------------------+
1 row in set (0.02 sec)
كما تلاحظون تمت عملية التشفير للكلمة السرية binary الى الرموز 9d7183f16acce70658f686ae7f1a4d20 حسب خوارزمية الـ MD5 التي أستعملناها …
الطريقه الثانيه :
التشفير باستخدام SHA1 :
الآن لنقوم بتجربة الـ SHA1 بنفس الطريقة … لنقم بإنشاء الجدول ولنسميه هذه المرة user_sha1 ويجب أن نحدد حجم حقل الكلمة السرية بـ 40 حرف/رمز/رقم، كما في الأمر:
mysql> CREATE TABLE user_sha1(
username VARCHAR(16), password VARCHAR(40)
);
Query OK, 0 rows affected (0.00 sec
الآن لنقوم بإضافة المستخدم binary والكلمة السرية binary أيضاً كما يلي:
mysql> INSERT INTO user_sha1 VALUES ('binary',SHA1('binary') );
Query OK, 1 row affected (0.00 sec
كما تلاحظون هذه المرة حين قمنا بإدخال الكلمة السرية، أستعملنا الدالة SHA1، وذلك لكي يتم تشفيرها بواسطة SHA1 …
الآن لنقوم بعرض المدخلات وهل تم تشفيرها أم لا، نفذ الأمر التالي:
mysql> SELECT * FROM user_sha1 where username = 'binary' AND password=SHA1('binary');
+----------+------------------------------------------+
| username | password |
+----------+------------------------------------------+
| binary | 7e57cfe843145135aee1f4d0d63ceb7842093712 |
+----------+------------------------------------------+
1 row in set (0.00 sec
الآن لنقوم بتجربة الـ AES بنفس الطريقة … لنقم بإنشاء الجدول ولنسميه هذه المرة user_aes ويجب أن نحدد هذه المرة نوع الحقل على إنه من نوع BLOB، كما في الأمر:
mysql> create table user_aes (
username VARCHAR(16), password BLOB
);
Query OK, 0 rows affected (0.00 sec
لآن عند إضافة حقل الى الجدول الخاص بـ AES سنقوم بإستعمال كلمة سرية ومفتاح سري لكي نستعمله بعملية التشفير … أذن لنقوم بإضافة المستخدم binary والكلمة سرية له binary والمفتاح الخاص به my_string_key، من خلال الأمر التالي:
mysql> INSERT INTO user_aes VALUES ('binary',AES_ENCRYPT('binary','my_string_key') );
Query OK, 1 row affected (0.00 sec)
كما تلاحظون هذه المرة حين قمنا بإدخال الكلمة السرية، أستعملنا الدالة AES_ENCRYPT، وذلك لكي يتم تشفيرها بواسطة AES …
الآن لنقوم بعرض المدخلات وهل تم تشفيرها أم لا، نفذ الأمر التالي:
mysql> SELECT * FROM user_aes WHERE username='binary' AND password=AES_ENCRYPT('binary','my_string_key');
+-----------+------------------+
| username | password |
+-----------+------------------+
| binary | N�lu-�/�T��p�o�> |
+-----------+------------------+
1 row in set (0.00 sec)
- يوجد دالة AES_DECRYPT قوموا بتجربتها لإستعادة الكلمة السرية المشفرة …
روابط اضافيه :http://dev.mysql.com...-functions.html
http://dev.mysql.com...onnections.html
This post has been edited by المبرمج: 14 September 2009 - 09:35 PM
أريد أن أوضح كيفية حفظ البيانات مشفرة بداخل القواعد MySQL … أي كيف نقوم مثلاً بعمل جدول خاص بالمستخدمين وكل مستخدم تكون الكلمة السرية له مشفرة … كيف يمكن فعل ذالك
هناك ثلاث طرق تسخدم في تشفير البيانات في قاعده البيانات MySQL:
الأولى بإستعمال التشفير (أو Hash) المعروفة MD5
الثانية بإستعمال التشفير (أو Hash) المعروفة SHA1
الثالثة بإستعمال التشفير AES، حيث يستعمل 128 بت.
ملاحظة: هناك طرق أخرى ولكن موضوعي يشرح الثلاث طرق أعلاه فقط ....
الطريقه الاولي :
التشفير باستخدام MD5 :
الآن لنرى كيف نقوم بعمل ذلك … سنبدأ مع طريقة MD5 … قم بالبداية بإنشاء جدول على أن يكون حجم حقل الكلمة السرية بـ 32 حرف/رمز/رقم، كما يلي:
CREATE TABLE user_md5 (
username VARCHAR(16), password VARCHAR(32)
);
قمنا بعمل جدول يتكون من حقلين، حقل يخص اسم المستخدم وحقل يخص الكلمة السرية له …
الآن لنقوم بإضافة بيانات تجريبية له، مثلاً أسم مستخدم binary وكلمة سرية له ولتكن binary أيضاً … نقوم بذلك كالآتي:
mysql> INSERT INTO user_md5 VALUES ('binary',MD5('binary') );
Query OK, 1 row affected (0.03 sec
كما تلاحظون أستعملنا الدالة MD5 عند إدخالنا للكلمة السرية، وذلك لكي يتم تشفيرها بواسطة MD5 …
الآن لنقوم بعرض المدخلات وهل تم تشفيرها أم لا، نفذ الأمر التالي:
mysql> SELECT * FROM user_md5 where username = 'binary' AND password=MD5('binary');
+-----------+----------------------------------+
| username | password |
+-----------+----------------------------------+
| binary | 9d7183f16acce70658f686ae7f1a4d20 |
+-----------+----------------------------------+
1 row in set (0.02 sec)
كما تلاحظون تمت عملية التشفير للكلمة السرية binary الى الرموز 9d7183f16acce70658f686ae7f1a4d20 حسب خوارزمية الـ MD5 التي أستعملناها …
الطريقه الثانيه :
التشفير باستخدام SHA1 :
الآن لنقوم بتجربة الـ SHA1 بنفس الطريقة … لنقم بإنشاء الجدول ولنسميه هذه المرة user_sha1 ويجب أن نحدد حجم حقل الكلمة السرية بـ 40 حرف/رمز/رقم، كما في الأمر:
mysql> CREATE TABLE user_sha1(
username VARCHAR(16), password VARCHAR(40)
);
Query OK, 0 rows affected (0.00 sec
الآن لنقوم بإضافة المستخدم binary والكلمة السرية binary أيضاً كما يلي:
mysql> INSERT INTO user_sha1 VALUES ('binary',SHA1('binary') );
Query OK, 1 row affected (0.00 sec
كما تلاحظون هذه المرة حين قمنا بإدخال الكلمة السرية، أستعملنا الدالة SHA1، وذلك لكي يتم تشفيرها بواسطة SHA1 …
الآن لنقوم بعرض المدخلات وهل تم تشفيرها أم لا، نفذ الأمر التالي:
mysql> SELECT * FROM user_sha1 where username = 'binary' AND password=SHA1('binary');
+----------+------------------------------------------+
| username | password |
+----------+------------------------------------------+
| binary | 7e57cfe843145135aee1f4d0d63ceb7842093712 |
+----------+------------------------------------------+
1 row in set (0.00 sec
الآن لنقوم بتجربة الـ AES بنفس الطريقة … لنقم بإنشاء الجدول ولنسميه هذه المرة user_aes ويجب أن نحدد هذه المرة نوع الحقل على إنه من نوع BLOB، كما في الأمر:
mysql> create table user_aes (
username VARCHAR(16), password BLOB
);
Query OK, 0 rows affected (0.00 sec
لآن عند إضافة حقل الى الجدول الخاص بـ AES سنقوم بإستعمال كلمة سرية ومفتاح سري لكي نستعمله بعملية التشفير … أذن لنقوم بإضافة المستخدم binary والكلمة سرية له binary والمفتاح الخاص به my_string_key، من خلال الأمر التالي:
mysql> INSERT INTO user_aes VALUES ('binary',AES_ENCRYPT('binary','my_string_key') );
Query OK, 1 row affected (0.00 sec)
كما تلاحظون هذه المرة حين قمنا بإدخال الكلمة السرية، أستعملنا الدالة AES_ENCRYPT، وذلك لكي يتم تشفيرها بواسطة AES …
الآن لنقوم بعرض المدخلات وهل تم تشفيرها أم لا، نفذ الأمر التالي:
mysql> SELECT * FROM user_aes WHERE username='binary' AND password=AES_ENCRYPT('binary','my_string_key');
+-----------+------------------+
| username | password |
+-----------+------------------+
| binary | N�lu-�/�T��p�o�> |
+-----------+------------------+
1 row in set (0.00 sec)
- يوجد دالة AES_DECRYPT قوموا بتجربتها لإستعادة الكلمة السرية المشفرة …
روابط اضافيه :http://dev.mysql.com...-functions.html
http://dev.mysql.com...onnections.html
This post has been edited by المبرمج: 14 September 2009 - 09:35 PM