سلام.
1- برای رمزگذاری فایل در ویندوز 10 از این روش استفاده می کنم...
ضمیمه 155581 ضمیمه 155582 ضمیمه 155583ضمیمه 155584 ضمیمه 155585
ادامه در پست بعدی....
Printable View
سلام.
1- برای رمزگذاری فایل در ویندوز 10 از این روش استفاده می کنم...
ضمیمه 155581 ضمیمه 155582 ضمیمه 155583ضمیمه 155584 ضمیمه 155585
ادامه در پست بعدی....
ادامه پست اول....
ضمیمه 155586
با این مراحل فایل یا پوشه و فایلهی آن رمزگذاری می شوند.
اما اگر کلید بازیابی رمزگذاری ذخیره سازی نشود فایل ها از دست می روند....
برای ایجاد کلید بازیابی رمزگذاری این مراحل باید طی شود....
بعد از مرحله سوم که برای رمزگذاری فایل استفاده شده ادامه می دهم ....
ضمیمه 155587 ضمیمه 155588 ضمیمه 155589 ضمیمه 155590
ادامه در پست بعد....
ادامه پست دوم ....
ضمیمه 155591
ضمیمه 155592
ضمیمه 155593
و اما من می خواهم با برنامه نویسی کلید بازیابی رمزگذاری ها (Certificate) را ایجاد کنم که کار را ساده کنم....
سوال: این کار رو با چه دستوراتی می توان انجام داد؟
با تشکر
پیداش کردم.
برای این کار نیاز به مرجع System.Security داریم:
Imports System.Security.Cryptography.X509Certificates
زمانی که فایل قفل یا رمزگذاری می شه طبق نام حساب کاربری فعلی Certificate در Store ایجاد و ذخیره سازی می شه:
ضمیمه 155598
که با این دستور می شه اونرو بصورت Binary استخراج کرد و در نهایت یا بصورت فایل و یا در دیتابیس برای استفاده مجدد ذخیره سازی کرد:
تابع ایجاد شده: که کدش رو از MSDN گیر آوردم:
Private Shared Function GetCertificateFromStore(ByVal certName As String) As X509Certificate2
' Get the certificate store for the current user.
Dim store As New X509Store(StoreLocation.CurrentUser)
Try
store.Open(OpenFlags.ReadOnly)
' Place all certificates in an X509Certificate2Collection object.
Dim certCollection As X509Certificate2Collection = store.Certificates
' If using a certificate with a trusted root you do not need to FindByTimeValid, instead use:
' currentCerts.Find(X509FindType.FindBySubjectDistin guishedName, certName, true);
Dim currentCerts As X509Certificate2Collection = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, False)
Dim signingCert As X509Certificate2Collection = currentCerts.Find(X509FindType.FindBySubjectDistin guishedName, certName, False)
If signingCert.Count = 0 Then
Return Nothing
End If ' Return the first certificate in the collection, has the right name and is current.
Return signingCert(0)
Finally
store.Close()
End Try
End Function 'GetCertificateFromStore
و دستوری که برای استخراج اطلاعات Certificate ایجاد کردم....
Dim CertName As String = String.Format("CN={0}", My.User.Name)
Dim cert As X509Certificate2 = GetCertificateFromStore(CertName)
Dim Bytes As Byte() = cert.Export(X509ContentType.Pfx, "2")
Dim FileName As String = String.Format(".\{0}.pfx", My.User.Name.Replace("", "-"))
IO.File.WriteAllBytes(FileName, Bytes)
در مورد کاراییش توی یک حساب کاربری دیگه هنور تست نکردم. اگه مشکلی داشت تصحیح خواهم کرد اِن شاء الله....
من برای اینکه تست کنم با رمزگذاری فایل Certificate با چه نامی ایجاد می شه همه Certificate ها رو از Store --> Personal حذف کردم ولی وقتی خواستم Backup بگیرم خطا ارسال کرد.
برای رفع خطا Backup که از قبل داشتم رو اجرا کردم و گزینه استفاده برای Backup رو هم براش فعال کردم درست شد:
ضمیمه 155599
اما نامی که ذخیره سازی شد فقط نام حساب کاربری بود و نام Computer قبلش نبود، یعنی بصورت پیش فرض به این صورت در Store موجود هست.
بنابراین دستور رو برای دریافت نام حساب کاربری به اینصورت تغییر دادم:
Dim CertName As String = String.Format("CN={0}", My.User.Name.Split("")(1))
Dim cert As X509Certificate2 = GetCertificateFromStore(CertName)
توی تابع Split از (\) Back Slash استفاده شده که این سایت حذفش می کنه.
البته از این دستور هم می شه استفاده کرد:
System.Environment.UserName