วิธีการเข้ารหัส และถอดรหัสลับแฟ้ม โดยใช้ Visual Basic .NET หรือ Visual Basic 2005

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 301070 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
สำหรับรุ่น Microsoft Visual c# .NET ของบทความนี้ ดู307010.
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายวิธีการใช้ระดับชั้นการเข้ารหัสที่จัดให้ โดย Framework Microsoft .NET คุณสามารถใช้ระดับชั้นการเข้ารหัสการเข้ารหัสลับแฟ้มข้อความไปยังสถานะไม่สามารถอ่าน แล้ว คุณสามารถที่ถอดรหัสลับแฟ้มข้อความนั้นกลับไปเป็นรูปแบบเดิม



ความต้องการ

รายการต่อไปนี้แสดงฮาร์ดแวร์ที่แนะนำ ซอฟต์แวร์ โครงสร้างพื้นฐานของเครือข่าย และ service pack ที่คุณต้องมี:
  • Microsoft Windows XP, Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Server การขั้นสูง หรือเซิร์ฟเวอร์ของ Microsoft Windows NT 4.0
  • Microsoft Visual Studio .NET หรือ Microsoft Visual Studio 2005

ใช้การเข้ารหัสและถอดรหัสลับ

namespace System.Security.Cryptographic ใน.NET Framework แสดงต่าง ๆ ของเครื่องมือที่ช่วย ในการเข้ารหัส และถอดรหัสลับ กระบวนการCryptoStreamคลาสที่มีคลาสที่จำนวนมากที่ให้ไว้อย่างใดอย่างหนึ่ง กระบวนการCryptoStreamคลาออกแบบมา เพื่อเข้ารหัสลับ หรือถอดรหัสลับเนื้อหา ตามเนื้อหาที่กำลังสตรีมออกไปยังแฟ้ม

การเข้ารหัสลับแฟ้ม ดำเนินการดังต่อไปนี้:
  1. เรียกใช้ Visual Studio .NET หรือ Visual Studio 2005
  2. สร้างโปรแกรมประยุกต์คอนโซลใหม่ ใน Visual Basic .NET หรือ Visual Basic 2005 มีสร้างโมดูลที่คุณ ร่วมกับว่างเปล่าMain()ขั้นตอน
  3. ใช้แบบนำเข้าใบแจ้งยอดใน namespace ระบบ System.Security namespace, System.Security.Cryptography namespace, System.Text namespace และ System.IO namespace คุณต้องทำเช่นนี้เพื่อให้คุณไม่มีการกำหนดคุณสมบัติ declarations จาก namespaces เหล่านี้ในภายหลังในรหัสของคุณ คุณต้องใช้คำสั่งเหล่านี้ก่อนที่จะ declarations อื่น ๆ
    Imports System
    Imports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text
    					
  4. สร้างคีย์ลับใน การเข้ารหัส และถอดรหัสข้อมูล กระบวนการDESCryptoServiceProviderคลาสที่จะขึ้นอยู่กับอัลกอริทึมการเข้ารหัสลับ symmetric เข้ารหัสลับ symmetric ต้องมีคีย์และ vector การเตรียมใช้งาน (IV) ในการเข้ารหัสข้อมูล เมื่อต้องการถอดรหัสข้อมูล คุณต้องมีคีย์เดียวกันและ IV ที่เหมือนกัน นอกจากนี้คุณต้องใช้อัลกอริทึมการเข้ารหัสลับเดียวกัน คุณสามารถสร้างคีย์การ โดยใช้วิธีการต่อไปนี้:
    • วิธีที่ 1:คุณสามารถแสดงกล่องโต้ตอบผู้ใช้ใส่รหัสผ่าน ใช้รหัสผ่านแล้ว เป็นคีย์และ IV
    • วิธีที่ 2เมื่อคุณสร้างอินสแตนท์ใหม่ของคลาสของการเข้ารหัสลับ symmetric คีย์ใหม่และ IV ที่ใหม่ถูกสร้างโดยอัตโนมัติสำหรับเซสชัน คุณสามารถใช้คีย์และ IV ที่สร้างขึ้น โดยได้รับการจัดการ symmetric เข้ารหัสลับคลาส การเข้ารหัส และถอดรหัสลับแฟ้ม

      สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธี การสร้าง และ การกระจายคีย์ เยี่ยมชมเว็บไซต์ต่อไปนี้ของ Microsoft หรือดูเอกสารชุด (SDK) ของการพัฒนาซอฟต์แวร์.NET Framework:

      .aspx http://msdn.microsoft.com/en-us/library/5e9ft273 (VS.71)
  5. เพิ่มฟังก์ชันต่อไปนี้เพื่อสร้างคีย์ใหม่สำหรับเซสชันในขณะที่บันทึกไว้ในวิธีที่ 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. สร้างวิธีการในคลาที่ชื่อEncryptFile. กระบวนการEncryptFileวิธีต้องมีพารามิเตอร์ที่สาม:
    • sInputFile
    • sOutputFile
    • sKey(นี่คือคีย์ลับที่ใช้ใน การเข้ารหัส และถอดรหัสลับแฟ้ม)
        Sub EncryptFile(ByVal sInputFilename As String, _
                       ByVal sOutputFilename As String, _
                       ByVal sKey As String)
        End Sub
    					
  7. ในการEncryptFileกระบวนการ สร้างการป้อนข้อมูลFileStreamวัตถุและการแสดงผลFileStreamวัตถุ วัตถุเหล่านี้สามารถอ่านจาก และเขียนไปยังแฟ้มเป้าหมาย
            Dim fsInput As New FileStream(sInputFilename, _
                                        FileMode.Open, FileAccess.Read)
            Dim fsEncrypted As New FileStream(sOutputFilename, _
                                        FileMode.Create, FileAccess.Write)
    					
  8. อินสแตนซ์ของการประกาศได้DESCryptoServiceProviderคลาสที่ แสดงถึงเทคโนโลยีการถอดรหัสลับที่แท้จริงที่ใช้บนแฟ้มและการเข้ารหัสลับที่แท้จริง ณจุดนี้ คุณสามารถสร้างตัวให้บริการอื่นได้ถ้าคุณต้องการใช้การรักษาความปลอดภัย RSA หรือเทคนิคการเข้ารหัสลับที่อื่น
    Dim DES As New DESCryptoServiceProvider()
    					
  9. ตัวให้บริการการเข้ารหัสลับต้องสามารถให้กับคีย์ลับของคุณเป็นอาร์เรย์ไบต์ System.Text namespace มีฟังก์ชันที่มีชื่อGetBytes(). เป็นส่วนหนึ่งของคุณลักษณะการเข้ารหัส การGetBytes()ฟังก์ชันใช้สตริงที่ และอาร์เรย์ของไบต์ที่ส่งกลับค่าแล้ว ขนาดของคีย์ที่แตกต่างกันสำหรับแต่ละเทคนิคหนึ่งที่ใช้ในการเข้ารหัสลับได้ ตัวอย่างเช่น ข้อมูลการเข้ารหัสลับมาตรฐาน (DES) ใช้คีย์แบบ 64 บิตที่เท่า กับ 8 ไบต์ หรือ 8 ตัว

    ถ้าคุณไม่มีคีย์ จากผู้ให้บริการแบบสุ่มสร้างหนึ่ง ซึ่งเข้ารหัสแฟ้มเรียบร้อยแล้ว แต่ไม่มีวิธีการถอดรหัสลับแฟ้ม โปรดสังเกตว่า คุณจะต้องใส่ IV ที่ ค่านี้จะใช้เป็นส่วนหนึ่งของการเข้ารหัสลับ เช่นเดียวกับคีย์ IV มีการสุ่มสร้างถ้าคุณไม่ใส่ค่า เนื่องจากค่าต้องไม่เหมือนกันสำหรับการเข้ารหัสลับและการถอดรหัสลับ คุณต้องไม่อนุญาตการสร้างค่าเหล่านี้แบบสุ่ม
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
    					
  10. สร้างอินสแตนซ์ของการCryptoStreamคลาสที่ ใช้ตัวให้บริการการเข้ารหัสลับเพื่อขอรับการ(encrypting ของวัตถุCreateEncryptor) และผลผลิตที่มีอยู่FileStreamobject as a part of the constructor.
    Dim cryptostream As New CryptoStream(fsEncrypted, _
                                         desencrypt, _
                                         CryptoStreamMode.Write)
    					
  11. Read in the input file, and then write out to the output file. Pass through theCryptoStreamobject where the file is encrypted by using the key that you provided.
    Dim bytearrayinput(fsInput.Length - 1) As Byte
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
    					
To decrypt a file, follow these steps:
  1. Create a method that is namedDecryptFile. The decryption process is similar to the encryption process. However,DecryptFilehas two key differences from theEncryptFileขั้นตอน
    • CreateDecryptoris used instead ofCreateEncryptorเมื่อต้องการสร้างการCryptoStreamobject that specifies how the object can be used.
    • When the decrypted text is written to the destination file, theCryptoStreamobject is now the source instead of the destination stream.
    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. Add the following lines to theMain()procedure to call bothEncryptFileและDecryptFile.
        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. บันทึกแฟ้ม Run your application. Make sure that the path that is used for the input file name points to an existing and a not important file.

Verify That the Encryption and the Decryption Work

Test this code with a text (.txt) file to confirm that the file is correctly encrypted and decrypted. Make sure that you decrypt the file to a new file (as in theSub Main()procedure in this article) instead of to the original file. Examine the decrypted file and compare the decrypted file to the original.

A Complete Code List

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

ข้อมูลอ้างอิง

For more information about how to use the cryptographic features of .NET and about cryptography, visit the following Microsoft Web sites:

http://msdn.microsoft.com/net

http://code.msdn.microsoft.com/

คุณสมบัติ

หมายเลขบทความ (Article ID): 301070 - รีวิวครั้งสุดท้าย: 10 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbvs2005swept kbvs2005applies kbsecurity kbio kbcrypt kbhowtomaster kbmt KB301070 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:301070

ให้ข้อเสนอแนะ

 

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