الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

معلومة/Encrypt Secrets for the Current User

مغلق
بدأه SOLO.NET في 25 نوفمبر 2005 · 8 رد · 1,055 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مقدمة:

اغلب التطبيقات بحاجة الى تخزين بيانات خاصة بها والحل هو تشفير البيانات(التشفير المتناظر مثلا) الذى يحمى البيانات باستخدام سلسلة عشوائية من البايتات تسمى المفتاح السرى، المشاكل تحدث عند فك تشفير البيانات المحمية حيث تحتاج لاستخدام نفس المفتاح السرى الذى استخدمته فى التشفير،ويوجد تعقيدات فى هذا الموضوع مثل ايجاد مكان امن لحفظ المفتاح السرى(وهذا صعب فى اغلب الاحوال) او اشتقاق المفتاح السرى من بيانات اخرى مثلا كلمة سر...الخ(وهى غير امنه ويمكن ان تضيع البيانات اذا نسى المستخدم كلمة السر)

ان الحل المثالى هو ان تدع نظام التشغيل ويندوز يشفر لك البيانات، ولتطبيق هذا ،انت بحاجة الى استخدام DPAPI (Data Protection API), الذى يشفر البيانات باستخدام المفتاح المتناظر بالاعتماد على مستخدم محدد او معلومات جهاز كمبيوتر محدد، بهذه الطريقة لا تقلق على مكان تخزين المفتاح السرى او التحقق من ان الشخص مخول لقراءة البيانات. لان البيانات المخزنة بواسطة مستخدم تصبح اتوماتيكيا غير ممكنة بالنسبة للمستخدمين الاخرين هذا لو تم حفظ البيانات بالنسبة لمستوى المستخدمين اما لو تم حفظ البيانات على نطاق الجهاز بالكامل فلا يمكن الوصول الى البيانات وفك تشفيرها على اى جهاز اخر

فى الاصدارات السابقة من .NET كان لا يوجد فئات مدارة لاستخدام DPAPI وهذا ما تم اضافته فى الاصدار الاخير .NET FRAMEWORK 2 متمثلا فى الفئة الجديدة ProtectedData الموجودة فى فضاء الاسماء System.Security.Cryptography namespace

التطبيق

الفئة ProtectedData تحتوى على طريقتان مشتركتان Shared Methods . ProtectData( ) هذه الطريقة تاخذ مصفوفة من البايتات byte array تمثل البيانات المصدر او البيانات المراد تشفيرها وحمايتها وتعيد مصفوفة من البايتات تمثل البيانات المشفرة

UnprotectData( ) تقوم هذه الطريقة بعكس ما تقوم به الطريقة الاولى اى تاخذ مصفوفة بايتات تمثل البيانات المشفرة وتعيد مصفوفة بايتات تمثل البيانات بدون تشفير

الصعوبة الوحيدة التى ستواجهها فى استخدام الطريقتين السابقتين هو انهما يقومان بتشفير وفك تشفير البيانات باستخدام مصفوفة من البايتات byte array ، فقط. هذا يعنى لو كنت تريد تشفير نصوص،ارقام، او اى شئ اخر لابد من تحويلة الى مصفوفة بايتات قبل تشفيره والقيام بالعكس عند فك التشفير

المثال التالى يبين كيفية تشفير نص وتخزينه فى ملف

Imports System.Security.Cryptography
Imports System.IO
    
Module ProctedData
    
    Sub Main( )     
        ' Get the data.
        Console.WriteLine("Enter a secret message and press enter.")
        Console.Write(">")
        Dim Input As String = Console.ReadLine( )
    
        Dim DataStream As MemoryStream
        If Input <> "" Then
            Dim Data( ), EncodedData( ) As Byte
    
            ' Write the data to a new MemoryStream.
            DataStream = New MemoryStream( )
            Dim Writer As New StreamWriter(DataStream)
            Writer.Write(Input)
            Writer.Close( )
    
            ' Convert the MemoryStream into a byte array,
            ' which is what you need to use the ProtectData( ) method.
            Data = DataStream.ToArray( )
    
            ' Encrypt the byte array.
            EncodedData = ProtectedData.Protect(Data, Nothing, _
              DataProtectionScope.CurrentUser)
    
            ' Store the encrypted data in a file.
            My.Computer.FileSystem.WriteAllBytes("c:\secret.bin", 
             EncodedData, False)
        End If
    End Sub
    
End Module

يمكنك تنفيذ الكود السابق فى تطبيق Console

عند تنفيذ البرنامج سيطلب منك ادخال نص الذى سيقوم بتشفيره باستخدام معلومات حساب المستخدم الحالى وسيتم تخزينه فى الملف secret.bin وهذه البيانات لا يمكن الوصول اليها من اى حساب مستخدم اخر .

والكود التالى يوضح كيفية فك تشفير البيانات الموجودة فى الملف secret.bin

If My.Computer.FileSystem.FileExists("c:\secret.bin") Then
    Dim Data( ), EncodedData( ) As Byte
    
    EncodedData = My.Computer.FileSystem.ReadAllBytes("c:\secret.bin")
    Data = ProtectedData.Unprotect(EncodedData, Nothing, _
      DataProtectionScope.CurrentUser)
    
    Dim DataStream As New MemoryStream(Data)
    Dim Reader As New StreamReader(DataStream)
    
    Console.WriteLine("Decoded data from file: " & Reader.ReadToEnd( ))
    Reader.Close( )
End If

تذكر، بما اننا استخدمنا حساب المستخدم الحالى فى تشفير البيانات يمكنك فك تشفيرها فى اى وقت ولكن الشرط الوحيد هو تسجيل الدخول بنفس الحساب الذى استخدمته فى التشفير جرب بحساب اخر وستفشل العملية

ولاحظ ايضا عند حماية البيانات يجب ان تختار احد قيم المرقم DataProtectionScope ويوجد به خياران :

LocalMachine

نظام التشغيل سيقوم بتشفير البيانات باستخدام بيانات الجهاز الذى تم عليه التشفير ولا يمكن الوصول اليها على اى جهاز اخر ولكن يمكن الوصول اليها من اى شخص يستخدم هذا الجهاز، وهذا الخيار جيد بالنسبة للبرامج التى تعمل باتجاه الخادم كخدمات ويندوز او خدمات الويب

CurrentUser

وهو ما قمنا بتطبيقة فى المثال السابق حيث لا يمكن الوصول الى البيانات من اى مستخدم غير المستخدم الذى قام بعملية التشفير

كما قمنا فى المثال السابق بحفظ البيانات بعد حمايتها فى ملف يمكن حفظها فى قاعدة البيانات داخل سجل كل ما تحتاجة هو حقل للبيانات الثنائية Binary

فى الجدول مع مساحة كافية لاستقبال البيانات القادمة

فى SQL Server استخدم varbinary

بالتوفيق

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#2

جزاك الله خيرا

رائع

جاري التجربة

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

واياك كل الخير اخى

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#4

معلومات جميله.. لكن مع تعديل قول +Fravia قليلا يصبح:

اقتباس
If VB.NET Then Decompiled_At_Once

حاليا اي تطبيق .NET معرض للـ decompiling وعلى ما يبدو فان .NET على قوتها هي بيئة برامج مفتوحة المصدر !! :D

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5
Xacker كتب:
معلومات جميله.. لكن مع تعديل قول +Fravia قليلا يصبح:

حاليا اي تطبيق .NET معرض للـ decompiling وعلى ما يبدو فان .NET على قوتها هي بيئة برامج مفتوحة المصدر !! :D

بس يا أخي بما أنك عم تحكي على موضوع الهندسة العكسية - وحتى لو خرجنا عن الموضوع الأساسي - في كتير طرق ممكن نحمي برامجنا فيها من الهندسة العكسية و عملية DECompile

مثلا برنامج PECompact أنا بستخدموا من أيام VB6 الو كتير فوائد أول شي بيحمي من موضوع الـ Decompile بعدين بيصغر حجم الـ EXE الناتج وبدون ما يأثر على سرعة أداء البرنامج

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#6
اقتباس
If it's shareable, it's crackable

شو رايك بقولي الجديد :D

اخي انسى ان تعتمد على برامج الحماية لحماية تطبيقك, حماية تطبيقك بواسطة برامج مثل PECompact , ASProducts , Arma , الخ هي مسالة وقت -- يعني انت بهالبرامج تاخر عملية قرصنة البرنامج فقط لكن لا تمنع قرصنته أاتيني باصدار واحد من PECompact لم يتم عمل reverse engineering له وكتابة unpacker :P

موضوع الحماية اكبر من pecom-whOt وغيره وان يعتمد المبرمج على هذه البرامج الجاهزة معتقدا انه يريح باله فهو مخطئ -- برنامجه محمي فقط من قبل الـ lamers واي قرصان صرله فترة بالـ scene رح يقدر يحصل على برنامجك بدون حماية.. وقلتلي فيجوال بسيك؟ ارجع لـقول +Fravia ;)

بالتوفيق

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8
اقتباس
وقلتلي فيجوال بسيك؟ ارجع لـقول +Fravia

كلامك سليم اخXacker ولكن لماذا VB.NET بالذات :angry: كل لغات الدوت نت فى الهوا سوا :(

ايضا لغات وبرامج WIN32 لم تسلم من القراصنة

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#9

اعتقد ان هذة الطريقة لا تصح مع Win 98 او Me

Practice makes perfect 2007*

البرمجة بلا انطباعات

هذا الموضوع مغلق.

مواضيع مشابهة