24-01-22, 07:32 PM
25-01-22, 08:08 PM
راجع هذا الرابط
https://www.mssqltips.com/sqlservertip/4...-database/
او بامكانك قبل حفظ الرقم السري في قاعدة البيانات ان تجري عليه بعض التعديلات بأن تضيف اوله رقم يتكون مثلا من خانتين وفي اخره رقم ثم تجمع الرقم الناتج مع رقم معين وتضربه برقم معين
ثم تقوم بحفظ الناتج الكلي في قاعدة البيانات فعلى افتراض ان الرقم السري 12345 نضيف اوله مثلا 24 واخره 25 فيصبح الرقم 2412344525 ثم نجع الناتج مع الرقم 2000 مثلا فيصبح الرقم كالتالي 241236525 ثم نضرب مثلا ب 17 فيصبح الرقم السري الذي يجزن في قاعدة البيانات هو 4101020925
وعند استدعائه يجب ارجاعه الى الرقم الاصلي بعملية عكسية
https://www.mssqltips.com/sqlservertip/4...-database/
او بامكانك قبل حفظ الرقم السري في قاعدة البيانات ان تجري عليه بعض التعديلات بأن تضيف اوله رقم يتكون مثلا من خانتين وفي اخره رقم ثم تجمع الرقم الناتج مع رقم معين وتضربه برقم معين
ثم تقوم بحفظ الناتج الكلي في قاعدة البيانات فعلى افتراض ان الرقم السري 12345 نضيف اوله مثلا 24 واخره 25 فيصبح الرقم 2412344525 ثم نجع الناتج مع الرقم 2000 مثلا فيصبح الرقم كالتالي 241236525 ثم نضرب مثلا ب 17 فيصبح الرقم السري الذي يجزن في قاعدة البيانات هو 4101020925
وعند استدعائه يجب ارجاعه الى الرقم الاصلي بعملية عكسية
25-01-22, 08:30 PM
يمكن تشفير الرمز قبل الحفظ ومن ثم فك التشفير عند الاستدعاء
25-01-22, 08:52 PM
(25-01-22, 08:30 PM)عدنان الشمري كتب : [ -> ]يمكن تشفير الرمز قبل الحفظ ومن ثم فك التشفير عند الاستدعاء
ممكن اكواد التشفير
وفك التشفير
25-01-22, 11:11 PM
السلام عليكم ورحمة الله وبركاته
اخي الكريم محمد
بالنسبة لحفظ كلمات السر في قاعدة البيانات على شكل نجمة لا أظن يمكن ذلك او لنقل ليس عندي علم لطريقة ما !!
لأن التخزين هو عبارة عن نص وإن قمت بالتخزين على شكل نجمة او نقط فأن النص المخزن لا يعني شيئا سوى نجوم او نقط
ولا يمكن تحويلهم كما نفعل مع مريع النص
لدي فكرة وسأورد لك مثال عليها
بما انك يمكنك قفل قاعدة البيانات بكلمة سر حيث لا يمكن لاحد الدخول اليها فلا ضير ان كتبت كلمات السر في الجدول على حالها
لكن يمكننا تحويل كلمات السر هذه عند جلبها الى الداتاغرايد بأن نجعلها بشكل نجوم ولا يمكن رؤيتها وبخاصة ان منعنا التحرير في الداتاغرايد
أي Enable Editing=false
في المثال التالي نفذت لك الكلام أعلاه وزدت عليه عند اختيار أي سجل سيتم عرضه في مربعي النص
واجد للاسم والثاني للباسورد يمكنك عرض كلمة السر او اخفاؤها عبر الشك بوكس
ربما تروق لك الفكرة هذه
اخي الكريم محمد
بالنسبة لحفظ كلمات السر في قاعدة البيانات على شكل نجمة لا أظن يمكن ذلك او لنقل ليس عندي علم لطريقة ما !!
لأن التخزين هو عبارة عن نص وإن قمت بالتخزين على شكل نجمة او نقط فأن النص المخزن لا يعني شيئا سوى نجوم او نقط
ولا يمكن تحويلهم كما نفعل مع مريع النص
لدي فكرة وسأورد لك مثال عليها
بما انك يمكنك قفل قاعدة البيانات بكلمة سر حيث لا يمكن لاحد الدخول اليها فلا ضير ان كتبت كلمات السر في الجدول على حالها
لكن يمكننا تحويل كلمات السر هذه عند جلبها الى الداتاغرايد بأن نجعلها بشكل نجوم ولا يمكن رؤيتها وبخاصة ان منعنا التحرير في الداتاغرايد
أي Enable Editing=false
في المثال التالي نفذت لك الكلام أعلاه وزدت عليه عند اختيار أي سجل سيتم عرضه في مربعي النص
واجد للاسم والثاني للباسورد يمكنك عرض كلمة السر او اخفاؤها عبر الشك بوكس
ربما تروق لك الفكرة هذه
26-01-22, 12:38 PM
بما انك تستخدم SQL DATABASE 2019
استخدم الطريقة :
HashAlgorithm.ComputeHash
أولاً تقوم بتحويل النص العادي (والتي هي كلمة المرور) : تحويلها من نص ( String ) إلى مصفوفة بايتات ( ()Byte )
ثانياُ : تنشاء متغير باسم ( SHA512 ) من نوع ( System.Security.Cryptography.SHA512Managed )
وذلك لإستخدام خوارزمية HashAlgorithm ( لتشفير البيانات في إتجاه واحد فقط غير قابل لفك التشفير )
ثالثاً : نستخدم المتغير SHA512 لتشفير البيانات الموجودة في المصفوفة ( PasswordData ) وحفظها في متغير جديد باسم ( PasswordHash )
إذا كان صندوق النص ( Me.PasswordTextBox.Text ) يحمل القيمة ( vb4arb.com )
أي ان كلمة المرور = vb4arb.com
بعد عملية التشفير بواسطة الطريقة ComputeHash
النتيجة ستكون كالتالي : وذلك بعد التشفير
لاحظ ان النص الموجود بالأسفل يعبر عن شكل البيانات الموجودة في المصفوفة المشفرة
ولكن المصفوفة المشفرة أساساً ليسة بهذا الشكل ( قمت بتحويلها إلى نص وذلك حتى تتمكن من أخذ فكرة عن شكل الناتج )
******************************************************************************
الطريقة المستخدمة لعرض شكل المصفوفة بشكل نصي : ( هذا النص البرمجي فقط لشرح شكل المصفوفة وغير مطلوب ,, تم إستخدامة فقط لعرض القيمة الموجودة بالأعلى)
******************************************************************************
الآن قم بحفظ قيمة المتغير ( PasswordHash ) والذي يحمل مصفوفة البيانات بعد التشفير
قم بحفظ القيمة في حقل قاعدة البيانات الخاص بكلمة المرور
ويكون نوع الحقل في قاعدة البيانات من نوع ( varbinary ) حصراً
الآن انت تمتلك كلمة مرور محفوظة في قاعدة البيانات ومشفرة ولا يمكن أبداً فك تشفيرها ( لأنها مشفرة بطريقة تشفير بإتجاه واحد )
إتجاه واحد يعني تشفير فقط ولا يمكن فك التشفير
بإتجاهين يعني تشفير ويمكن فك التشفير بالعكس
ماذا يمكنك الآن ان تفعل بهذا الحقل ؟؟؟؟
فقط يمكنك إستخدامة للمقارنة فقط
أي بمعنى :
إذا أردت ان تتحقق من صحة كلمة المرور الذي أدخلها المستخدم ( وذلك لعملية تسجيل الدخول للبرنامج مثلاً )
الخطوات كالتالي :
كلمة المرور الصحيحة محفوظة في قاعدة البيانات بشكل مشفر ( تمام )
الآن يحاول المستخدم تسجيل الدخول للبرنامج :
بعد أن يقوم المستخدم بإدخال كلمة المرور
1 - تقوم بإعادة كل الخطوات المذكورة بالأعلى مع كلمة المرور الذي قام المستخدم بإدخالها
إذا كانت نتيجة الإستعلام صفر ( لم يتم إرجاع اي سجل Row )
هذا يعني ( الرسالة المشهورة ) :
" اسم المستخدم أو كلمة المرور غير صحيحة "
الآن انت تمتلك كلمة مرور مشفرة ( التي يحاول المستخدم الآن إستخدامها لتسجيل الدخول )
لعملية التحقق من صحة كلمة المرور المدخلة
تقوم بإرسال اسم المستخدم مع ( كلمة المرور المشفرة ) إلى قاعدة البيانات في إجراء مخزن مثلاً وعمل إستعلام عادي
إذا قام الإستعلام بإرجاع نتيجة لك ( هذا يعني أنه وجد اسم المستخدم وكلمة المرور متطابقة ) والنتيجة عبارة عن سجل واحد ( Row ) ناتج من عملية الإستعلام
تتم المقارنة بين كلمات المرور وهي في حالت التشفير
إذا تطابقت ( كلمة المرور المشفرة المدخلة ) مع ( كلمة المرور المشفرة الموجودة في قاعدة البيانات )
إذا دخلت على ( SQL Server 2019 ) وعند عرضك للجدول في قاعدة البيانات
في الإستعلامات سيظهر الحقل بهذا الشكل
[attachment=27533]
في وضح التحرير سيظهر الحقل بهذا الشكل ( لأنه لا يمكنك تحرير حقل من نوع مصفوفة بشكل يدوي )
[attachment=27534]
هذة الطريقة الأأمن والأقوى المستخدمة في أغلب المواقع على شبكة الانترنت لحفظ كلمات المرور
أتمنى الفكرة تكون واضحة
استخدم الطريقة :
HashAlgorithm.ComputeHash
أولاً تقوم بتحويل النص العادي (والتي هي كلمة المرور) : تحويلها من نص ( String ) إلى مصفوفة بايتات ( ()Byte )
كود :
Dim PasswordData As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.PasswordTextBox.Text)ثانياُ : تنشاء متغير باسم ( SHA512 ) من نوع ( System.Security.Cryptography.SHA512Managed )
وذلك لإستخدام خوارزمية HashAlgorithm ( لتشفير البيانات في إتجاه واحد فقط غير قابل لفك التشفير )
كود :
Dim SHA512 As New System.Security.Cryptography.SHA512Managedثالثاً : نستخدم المتغير SHA512 لتشفير البيانات الموجودة في المصفوفة ( PasswordData ) وحفظها في متغير جديد باسم ( PasswordHash )
كود :
Dim PasswordHash As Byte() = SHA512.ComputeHash(PasswordData)إذا كان صندوق النص ( Me.PasswordTextBox.Text ) يحمل القيمة ( vb4arb.com )
أي ان كلمة المرور = vb4arb.com
بعد عملية التشفير بواسطة الطريقة ComputeHash
النتيجة ستكون كالتالي : وذلك بعد التشفير
لاحظ ان النص الموجود بالأسفل يعبر عن شكل البيانات الموجودة في المصفوفة المشفرة
ولكن المصفوفة المشفرة أساساً ليسة بهذا الشكل ( قمت بتحويلها إلى نص وذلك حتى تتمكن من أخذ فكرة عن شكل الناتج )
كود :
45b6deacb27a617b889f1396da586270a131082c5ad83a9cd916aa72b07c296a43f33290aa9548f9d1b7fbbf169092ca8a25251ea461e688985451d5f8d77d39******************************************************************************
الطريقة المستخدمة لعرض شكل المصفوفة بشكل نصي : ( هذا النص البرمجي فقط لشرح شكل المصفوفة وغير مطلوب ,, تم إستخدامة فقط لعرض القيمة الموجودة بالأعلى)
كود :
Dim txt As String = BitConverter.ToString(PasswordHash).Replace("-", "")******************************************************************************
الآن قم بحفظ قيمة المتغير ( PasswordHash ) والذي يحمل مصفوفة البيانات بعد التشفير
قم بحفظ القيمة في حقل قاعدة البيانات الخاص بكلمة المرور
ويكون نوع الحقل في قاعدة البيانات من نوع ( varbinary ) حصراً
الآن انت تمتلك كلمة مرور محفوظة في قاعدة البيانات ومشفرة ولا يمكن أبداً فك تشفيرها ( لأنها مشفرة بطريقة تشفير بإتجاه واحد )
إتجاه واحد يعني تشفير فقط ولا يمكن فك التشفير
بإتجاهين يعني تشفير ويمكن فك التشفير بالعكس
ماذا يمكنك الآن ان تفعل بهذا الحقل ؟؟؟؟
فقط يمكنك إستخدامة للمقارنة فقط
أي بمعنى :
إذا أردت ان تتحقق من صحة كلمة المرور الذي أدخلها المستخدم ( وذلك لعملية تسجيل الدخول للبرنامج مثلاً )
الخطوات كالتالي :
كلمة المرور الصحيحة محفوظة في قاعدة البيانات بشكل مشفر ( تمام )
الآن يحاول المستخدم تسجيل الدخول للبرنامج :
بعد أن يقوم المستخدم بإدخال كلمة المرور
1 - تقوم بإعادة كل الخطوات المذكورة بالأعلى مع كلمة المرور الذي قام المستخدم بإدخالها
كود :
Dim PasswordData As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.PasswordTextBox.Text)
Dim SHA512 As New System.Security.Cryptography.SHA512Managed
Dim PasswordHash As Byte() = SHA512.ComputeHash(PasswordData)هذا يعني ( الرسالة المشهورة ) :
" اسم المستخدم أو كلمة المرور غير صحيحة "
الآن انت تمتلك كلمة مرور مشفرة ( التي يحاول المستخدم الآن إستخدامها لتسجيل الدخول )
لعملية التحقق من صحة كلمة المرور المدخلة
تقوم بإرسال اسم المستخدم مع ( كلمة المرور المشفرة ) إلى قاعدة البيانات في إجراء مخزن مثلاً وعمل إستعلام عادي
إذا قام الإستعلام بإرجاع نتيجة لك ( هذا يعني أنه وجد اسم المستخدم وكلمة المرور متطابقة ) والنتيجة عبارة عن سجل واحد ( Row ) ناتج من عملية الإستعلام
كود :
SELECT Username FROM [dbo].[UsersTable]
WHERE [Username] = @UserName AND [Password] = @Passwordتتم المقارنة بين كلمات المرور وهي في حالت التشفير
إذا تطابقت ( كلمة المرور المشفرة المدخلة ) مع ( كلمة المرور المشفرة الموجودة في قاعدة البيانات )
إذا دخلت على ( SQL Server 2019 ) وعند عرضك للجدول في قاعدة البيانات
في الإستعلامات سيظهر الحقل بهذا الشكل
[attachment=27533]
في وضح التحرير سيظهر الحقل بهذا الشكل ( لأنه لا يمكنك تحرير حقل من نوع مصفوفة بشكل يدوي )
[attachment=27534]
هذة الطريقة الأأمن والأقوى المستخدمة في أغلب المواقع على شبكة الانترنت لحفظ كلمات المرور
أتمنى الفكرة تكون واضحة
27-01-22, 11:22 AM
(26-01-22, 12:38 PM)عبدالله الدوسري كتب : [ -> ]بما انك تستخدم SQL DATABASE 2019شكرا اخي الكريم
استخدم الطريقة :
HashAlgorithm.ComputeHash
أولاً تقوم بتحويل النص العادي (والتي هي كلمة المرور) : تحويلها من نص ( String ) إلى مصفوفة بايتات ( ()Byte )
كود :
Dim PasswordData As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.PasswordTextBox.Text)
ثانياُ : تنشاء متغير باسم ( SHA512 ) من نوع ( System.Security.Cryptography.SHA512Managed )
وذلك لإستخدام خوارزمية HashAlgorithm ( لتشفير البيانات في إتجاه واحد فقط غير قابل لفك التشفير )
كود :
Dim SHA512 As New System.Security.Cryptography.SHA512Managed
ثالثاً : نستخدم المتغير SHA512 لتشفير البيانات الموجودة في المصفوفة ( PasswordData ) وحفظها في متغير جديد باسم ( PasswordHash )
كود :
Dim PasswordHash As Byte() = SHA512.ComputeHash(PasswordData)
إذا كان صندوق النص ( Me.PasswordTextBox.Text ) يحمل القيمة ( vb4arb.com )
أي ان كلمة المرور = vb4arb.com
بعد عملية التشفير بواسطة الطريقة ComputeHash
النتيجة ستكون كالتالي : وذلك بعد التشفير
لاحظ ان النص الموجود بالأسفل يعبر عن شكل البيانات الموجودة في المصفوفة المشفرة
ولكن المصفوفة المشفرة أساساً ليسة بهذا الشكل ( قمت بتحويلها إلى نص وذلك حتى تتمكن من أخذ فكرة عن شكل الناتج )
كود :
45b6deacb27a617b889f1396da586270a131082c5ad83a9cd916aa72b07c296a43f33290aa9548f9d1b7fbbf169092ca8a25251ea461e688985451d5f8d77d39
******************************************************************************
الطريقة المستخدمة لعرض شكل المصفوفة بشكل نصي : ( هذا النص البرمجي فقط لشرح شكل المصفوفة وغير مطلوب ,, تم إستخدامة فقط لعرض القيمة الموجودة بالأعلى)
كود :
Dim txt As String = BitConverter.ToString(PasswordHash).Replace("-", "")
******************************************************************************
الآن قم بحفظ قيمة المتغير ( PasswordHash ) والذي يحمل مصفوفة البيانات بعد التشفير
قم بحفظ القيمة في حقل قاعدة البيانات الخاص بكلمة المرور
ويكون نوع الحقل في قاعدة البيانات من نوع ( varbinary ) حصراً
الآن انت تمتلك كلمة مرور محفوظة في قاعدة البيانات ومشفرة ولا يمكن أبداً فك تشفيرها ( لأنها مشفرة بطريقة تشفير بإتجاه واحد )
إتجاه واحد يعني تشفير فقط ولا يمكن فك التشفير
بإتجاهين يعني تشفير ويمكن فك التشفير بالعكس
ماذا يمكنك الآن ان تفعل بهذا الحقل ؟؟؟؟
فقط يمكنك إستخدامة للمقارنة فقط
أي بمعنى :
إذا أردت ان تتحقق من صحة كلمة المرور الذي أدخلها المستخدم ( وذلك لعملية تسجيل الدخول للبرنامج مثلاً )
الخطوات كالتالي :
كلمة المرور الصحيحة محفوظة في قاعدة البيانات بشكل مشفر ( تمام )
الآن يحاول المستخدم تسجيل الدخول للبرنامج :
بعد أن يقوم المستخدم بإدخال كلمة المرور
1 - تقوم بإعادة كل الخطوات المذكورة بالأعلى مع كلمة المرور الذي قام المستخدم بإدخالها
إذا كانت نتيجة الإستعلام صفر ( لم يتم إرجاع اي سجل Row )كود :
Dim PasswordData As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.PasswordTextBox.Text)
Dim SHA512 As New System.Security.Cryptography.SHA512Managed
Dim PasswordHash As Byte() = SHA512.ComputeHash(PasswordData)
هذا يعني ( الرسالة المشهورة ) :
" اسم المستخدم أو كلمة المرور غير صحيحة "
الآن انت تمتلك كلمة مرور مشفرة ( التي يحاول المستخدم الآن إستخدامها لتسجيل الدخول )
لعملية التحقق من صحة كلمة المرور المدخلة
تقوم بإرسال اسم المستخدم مع ( كلمة المرور المشفرة ) إلى قاعدة البيانات في إجراء مخزن مثلاً وعمل إستعلام عادي
إذا قام الإستعلام بإرجاع نتيجة لك ( هذا يعني أنه وجد اسم المستخدم وكلمة المرور متطابقة ) والنتيجة عبارة عن سجل واحد ( Row ) ناتج من عملية الإستعلام
كود :
SELECT Username FROM [dbo].[UsersTable]
WHERE [Username] = @UserName AND [Password] = @Password
تتم المقارنة بين كلمات المرور وهي في حالت التشفير
إذا تطابقت ( كلمة المرور المشفرة المدخلة ) مع ( كلمة المرور المشفرة الموجودة في قاعدة البيانات )
إذا دخلت على ( SQL Server 2019 ) وعند عرضك للجدول في قاعدة البيانات
في الإستعلامات سيظهر الحقل بهذا الشكل
في وضح التحرير سيظهر الحقل بهذا الشكل ( لأنه لا يمكنك تحرير حقل من نوع مصفوفة بشكل يدوي )
هذة الطريقة الأأمن والأقوى المستخدمة في أغلب المواقع على شبكة الانترنت لحفظ كلمات المرور
أتمنى الفكرة تكون واضحة
الطريقة التي ابحث عنها سهلة جدا وهيا تشغيل كود في sql فقط
Query
كود لتشفير كلمة السر
وكود للعكس لاظهار كلمة السر
هذا الكود يشتغل علي كافة المستخدمين بالجدول