Làm th? nào đ? m? hóa và gi?i m? m?t t?p tin b?ng cách s? d?ng Visual Basic.NET ho?c Visual Basic 2005

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 301070 - Xem s?n ph?m mà bài này áp d?ng vào.
Đ?i v?i m?t Microsoft Visual C#.NET Phiên b?n này vi?t, xem 307010.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t này mô t? cách s? d?ng các l?p h?c m?t m? h?c mà đư?c cung c?p b?i Microsoft.NET Framework. B?n có th? s? d?ng m?t m? h?c các l?p h?c đ? m? hóa m?t t?p tin văn b?n đ?n tr?ng thái không đ?c đư?c. Sau đó, b?n có th? gi?i m? t?p văn b?n đó quay l?i đ?nh d?ng ban đ?u c?a nó.



Yêu c?u

Danh sách sau v?ch ra đư?c đ? ngh? ph?n c?ng, ph?n m?m, h? t?ng m?ng, và gói d?ch v? mà b?n ph?i có:
  • Microsoft Windows XP, Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, ho?c máy ch? Microsoft Windows NT 4.0
  • Microsoft Visual Studio.NET ho?c Microsoft Visual Studio 2005

S? d?ng m? hóa và gi?i m?

Không gian tên System.Security.Cryptographic trong các.NET Framework cung c?p m?t lo?t các công c? đ? h? tr? trong m? hóa và gi?i m?. Các CryptoStream l?p h?c là m?t trong nhi?u l?p h?c đư?c cung c?p. Các CryptoStream l?p h?c đư?c thi?t k? đ? m?t m? hóa ho?c gi?i m? n?i dung như các n?i dung đư?c xem tr?c ti?p ra vào m?t t?p tin.

M?t m? hóa m?t t?p tin, làm theo các bư?c sau:
  1. Ch?y Visual Studio.NET ho?c Visual Studio 2005.
  2. T?o m?t ?ng d?ng giao di?n đi?u khi?n m?i trong Visual Basic.NET hay Visual Basic 2005. Một mô-đun đư?c t?o ra cho b?n, cùng v?i m?t s?n ph?m nào Main() th? t?c.
  3. S? d?ng các Nh?p kh?u tuyên b? trên không gian tên h? th?ng, không gian tên System.Security, không gian tên System.Security.Cryptography, không gian tên System.Text, và các Không gian tên System.io. B?n ph?i làm đi?u này, do đó b?n không c?n ph?i vư?t qua v?ng lo?i khai báo t? các không gian tên sau trong m? c?a b?n. B?n ph?i s? d?ng các th? phát bi?u trư?c khi b?t k? t? khai khác.
    Imports System
    Imports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text
    					
  4. T?o ra m?t khóa bí m?t m? hóa và gi?i m? d? li?u. Các DESCryptoServiceProvider l?p đư?c d?a trên m?t thu?t toán m?t m? đ?i x?ng. Các đ?i x?ng m? hóa đ?i h?i m?t khóa và m?t véc tơ kh?i t?o (IV) đ? m? hóa các d? li?u. Đ? gi?i m? d? li?u, b?n ph?i có cùng m?t và cùng m?t IV. B?n ph?i c?ng s? d?ng thu?t toán m? hóa tương t?. B?n có th? t?o ra các phím b?ng cách s? d?ng m?t trong nh?ng phương pháp sau đây:
    • Phương pháp 1 B?n có th? nh?c ngư?i dùng cho m?t kh?u. Sau đó, s? d?ng m?t kh?u như Đi?u quan tr?ng và các IV.
    • Phương pháp 2 Khi b?n t?o ra m?t trư?ng h?p m?i c?a s? đ?i x?ng m?t m? các l?p h?c, khóa m?i và m?t IV m?i s? t? đ?ng t?o ra cho k? h?p. B?n có th? s? d?ng ch?a khóa và IV đư?c t?o ra b?i các qu?n l? đ?i x?ng các l?p h?c m?t m? đ? m? hóa và gi?i m? t?p tin.

      Đ? bi?t thêm thông tin v? làm th? nào đ? t?o ra và phân ph?i các phím, h?y truy c?p sau đây Web site c?a Microsoft ho?c xem các.NET Framework kit phát tri?n ph?n m?m (SDK) tài li?u:

      http://MSDN.Microsoft.com/en-US/Library/5e9ft273 (VS.71) .aspx
  5. Thêm các ch?c năng sau đây đ? t?o ra m?t khóa cho m?t Phiên làm vi?c như đ? nêu trong phương pháp 2:
       ' Call this function to remove the key from memory after it is used for security.
       Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" _
                         (ByVal Destination As String, ByVal Length As Integer)
       
       ' Function to generate a key.
       Function GenerateKey() As String
          ' Create an instance of Symmetric Algorithm. The key and the IV are generated automatically.
          Dim desCrypto As DESCryptoServiceProvider = DESCryptoServiceProvider.Create()
    
          ' Use the automatically generated key for encryption. 
          Return ASCIIEncoding.ASCII.GetString(desCrypto.Key)
       End Function 
  6. T?o ra m?t phương pháp trong các l?p h?c c?a b?n đư?c đ?t tên theo EncryptFile. Các EncryptFile phương pháp ph?i có 3 thông s?:
    • sInputFile
    • sOutputFile
    • sKey (Đây là ch?a khóa bí m?t đư?c s? d?ng đ? m? hóa và gi?i m? " các t?p tin.)
        Sub EncryptFile(ByVal sInputFilename As String, _
                       ByVal sOutputFilename As String, _
                       ByVal sKey As String)
        End Sub
    					
  7. Trong các EncryptFile th? t?c, t?o m?t đ?u vào FileStream đ?i tư?ng và s?n lư?ng FileStream đ?i tư?ng. Các đ?i tư?ng có th? đư?c đ?c t? và ghi vào m?c tiêu t?p tin.
            Dim fsInput As New FileStream(sInputFilename, _
                                        FileMode.Open, FileAccess.Read)
            Dim fsEncrypted As New FileStream(sOutputFilename, _
                                        FileMode.Create, FileAccess.Write)
    					
  8. Tuyên b? m?t th? hi?n c?a các DESCryptoServiceProvider l?p h?c. Đi?u này đ?i di?n cho các m? hóa th?c t? và th?c t? công ngh? gi?i m? đư?c s? d?ng trên các t?p tin. T?i th?i đi?m này, b?n có th? t?o m?t nhà cung c?p khác nhau n?u b?n mu?n s? d?ng b?o m?t RSA này hay cách khác m?t m? k? thu?t.
    Dim DES As New DESCryptoServiceProvider()
    					
  9. M?t m? nhà cung c?p ph?i đư?c cung c?p c?a b?n khóa bí m?t như m?t m?ng c?a byte. Không gian tên System.Text cung c?p m?t ch?c năng mà đư?c đ?t tên theo GetBytes(). Như m?t ph?n c?a tính năng m? hóa c?a nó, các GetBytes() ch?c năng di?n m?t chu?i và sau đó tr? v? m?t m?ng c?a byte. Các Kích thư?c c?a phím là khác nhau cho m?i k? thu?t m?t m?. Ví d?, Data Encryption Standard (DES) m?t m?t 64-bit chính mà b?ng đ?n 8 byte ho?c v?i 8 k? t?.

    N?u b?n không cung c?p m?t khóa, các nhà cung c?p ng?u nhiên t?o ra m?t. Đi?u này thành công m? hóa t?p tin, nhưng không có cách nào đ? gi?i m? t?p tin. Lưu ? r?ng b?n c?ng ph?i cung c?p các IV. Giá tr? này đư?c s? d?ng như m?t ph?n c?a các m? hóa. Gi?ng như ch?a khóa, các IV đư?c t?o ng?u nhiên ra n?u b?n làm cung c?p giá tr?. B?i v? các giá tr? ph?i gi?ng nhau cho c? hai các m? hóa và gi?i m?, b?n ph?i cho phép ng?u nhiên th? h? s? này các giá tr?.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
    					
  10. T?o m?t th? hi?n c?a các CryptoStream l?p h?c. S? d?ng các nhà cung c?p m?t m? đ? có đư?c m?t m?t m? hóa đ?i tư?ng)CreateEncryptor) và đ?u ra hi?n có FileStream đ?i tư?ng là m?t ph?n c?a các nhà xây d?ng.
    Dim cryptostream As New CryptoStream(fsEncrypted, _
                                         desencrypt, _
                                         CryptoStreamMode.Write)
    					
  11. Đ?c trong t?p tin đ?u vào, và sau đó ghi đ?n đ?u ra t?p tin. Đi qua các CryptoStream đ?i tư?ng mà các t?p tin đư?c m? hóa b?ng cách s? d?ng ch?a khóa mà b?n cung c?p.
    Dim bytearrayinput(fsInput.Length - 1) As Byte
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
    					
Đ? gi?i m? t?p tin, h?y làm theo các bư?c sau:
  1. T?o ra m?t phương pháp đư?c đ?t tên theo DecryptFile. Ti?n tr?nh gi?i m?t m? là tương t? như quá tr?nh m? hóa. Tuy nhiên, DecryptFile có hai s? khác bi?t quan tr?ng t? các EncryptFile th? t?c.
    • CreateDecryptor đư?c s? d?ng thay CreateEncryptor đ? t?o ra các CryptoStream đ?i tư?ng xác đ?nh như th? nào đ?i tư?ng có th? đư?c s? d?ng.
    • Khi các văn b?n gi?i m? đư?c vi?t đ?n đích t?p tin, các CryptoStream bây gi? là ngu?n thay v? c?a các đi?m đ?n d?ng.
    Sub DecryptFile(ByVal sInputFilename As String, _
        ByVal sOutputFilename As String, _
        ByVal sKey As String)
    
        Dim DES As New DESCryptoServiceProvider()
        'A 64-bit key and an IV are required for this provider.
        'Set secret key for DES algorithm.
        DES.Key() = ASCIIEncoding.ASCII.GetBytes(sKey)
        'Set initialization vector.
        DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
    
        'Create a file stream to read the encrypted file back.
        Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
        'Create a DES Decryptor from your DES instance.
        Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
        'Create a crypto stream set to read and to do a DES decryption transform on incoming bytes.
        Dim cryptostreamDecr As New CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read)
        'Print out the contents of the decrypted file.
        Dim fsDecrypted As New StreamWriter(sOutputFilename)
        fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd)
        fsDecrypted.Flush()
        fsDecrypted.Close()
    End Sub
    					
  2. Thêm d?ng sau vào các Main() th? t?c đ? kêu g?i c? hai EncryptFileDecryptFile.
        Public Sub Main()      'Must be 64 bits, 8 bytes.
          Dim sSecretKey As String
    
          ' Get the key for the file to encrypt.
          ' You can distribute this key to the user who will decrypt the file.
          sSecretKey = GenerateKey()
    
          ' For additional security, pin the key.
          Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned)
    
    
          ' Encrypt the file.        
          EncryptFile("%USERPROFILE%\MyData.txt", _
                          "%USERPROFILE%\Encrypted.txt", _
                          sSecretKey)
    
          ' Decrypt the file.
          DecryptFile("%USERPROFILE%\Encrypted.txt", _
                      "%USERPROFILE%\Decrypted.txt", _
                      sSecretKey)
    
          ' Remove the key from memory.
          ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2)
          gch.Free()
       End Sub
  3. Lưu t?p tin. Ch?y ?ng d?ng c?a b?n. H?y ch?c ch?n r?ng các đư?ng d?n đư?c s? d?ng cho tên t?p tin đ?u vào đi?m đ?n m?t hi?n có và m?t không t?p tin quan tr?ng.

Xác minh r?ng các m? hóa và gi?i m? ho?t đ?ng

Ki?m tra m? này v?i m?t t?p tin văn b?n (.txt) đ? xác nh?n r?ng t?p tin m?t cách chính xác đư?c m? hóa và gi?i m?. Đ?m b?o r?ng b?n gi?i m? t?p tin vào m?t t?p m?i (như trong các Ph? Main() th? t?c trong bài vi?t này) thay v? t?p g?c. Ki?m tra các t?p tin gi?i m? và so sánh các t?p tin gi?i m? cho các Ban đ?u.

Danh sách các m? hoàn ch?nh

Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Cryptography
Imports System.Runtime.InteropServices
Imports System.Text


Module Module1

   ' Call this function to remove the key from memory after it is used for security.
   <DllImport("kernel32.dll")> _
   Public Sub ZeroMemory(ByVal addr As IntPtr, ByVal size As Integer)
   End Sub

   ' Function to generate a 64-bit key.
   Function GenerateKey() As String
      ' Create an instance of a symmetric algorithm. The key and the IV are generated automatically.
      Dim desCrypto As DESCryptoServiceProvider = DESCryptoServiceProvider.Create()

      ' Use the automatically generated key for encryption. 
      Return ASCIIEncoding.ASCII.GetString(desCrypto.Key)

   End Function

   Sub EncryptFile(ByVal sInputFilename As String, _
                  ByVal sOutputFilename As String, _
                  ByVal sKey As String)

      Dim fsInput As New FileStream(sInputFilename, _
                                  FileMode.Open, FileAccess.Read)
      Dim fsEncrypted As New FileStream(sOutputFilename, _
                                  FileMode.Create, FileAccess.Write)

      Dim DES As New DESCryptoServiceProvider()

      'Set secret key for DES algorithm.
      'A 64-bit key and an IV are required for this provider.
      DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)

      'Set the initialization vector.
      DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

      'Create the DES encryptor from this instance.
      Dim desencrypt As ICryptoTransform = DES.CreateEncryptor()
      'Create the crypto stream that transforms the file stream by using DES encryption.
      Dim cryptostream As New CryptoStream(fsEncrypted, _
                                          desencrypt, _
                                          CryptoStreamMode.Write)

      'Read the file text to the byte array.
      Dim bytearrayinput(fsInput.Length - 1) As Byte
      fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
      'Write out the DES encrypted file.
      cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
      cryptostream.Close()
   End Sub

   Sub DecryptFile(ByVal sInputFilename As String, _
       ByVal sOutputFilename As String, _
       ByVal sKey As String)

      Dim DES As New DESCryptoServiceProvider()
      'A 64-bit key and an IV are required for this provider.
      'Set the secret key for the DES algorithm.
      DES.Key() = ASCIIEncoding.ASCII.GetBytes(sKey)
      'Set the initialization vector.
      DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

      'Create the file stream to read the encrypted file back.
      Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
      'Create the DES decryptor from the DES instance.
      Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
      'Create the crypto stream set to read and to do a DES decryption transform on incoming bytes.
      Dim cryptostreamDecr As New CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read)
      'Print out the contents of the decrypted file.
      Dim fsDecrypted As New StreamWriter(sOutputFilename)
      fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd)
      fsDecrypted.Flush()
      fsDecrypted.Close()
   End Sub

   Public Sub Main()
      'Must be 64 bits, 8 bytes.
      Dim sSecretKey As String

      ' Get the key for the file to encrypt.
      ' You can distribute this key to the user who will decrypt the file.
      sSecretKey = GenerateKey()

      ' For additional security, pin the key.
      Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned)


      ' Encrypt the file.        
      EncryptFile("%USERPROFILE%\MyData.txt", _
                      "%USERPROFILE%\Encrypted.txt", _
                      sSecretKey)

      ' Decrypt the file.
      DecryptFile("%USERPROFILE%\Encrypted.txt", _
                  "%USERPROFILE%\Decrypted.txt", _
                  sSecretKey)

      ' Remove the key from memory. 
      ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2)
      gch.Free()
   End Sub

End Module

THAM KH?O

Đ? bi?t thêm v? cách s? d?ng các m?t m? tính năng c?a.NET và v? m?t m? h?c, truy c?p vào trang Web Microsoft sau đây các trang web:

http://MSDN.Microsoft.com/net

http://Code.MSDN.Microsoft.com/

Thu?c tính

ID c?a bài: 301070 - L?n xem xét sau cùng: 26 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
T? khóa: 
kbvs2005swept kbvs2005applies kbsecurity kbio kbcrypt kbhowtomaster kbmt KB301070 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:301070

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com