Visual Basic.NET 또는 Visual Basic 2005를 사용 하 여 파일을 해독 하 고 암호화 하는 방법

이 문서의 Microsoft Visual C#.NET 버전을 참조 하십시오.
307010 .
이 문서에서는 다음 Microsoft.NET Framework 클래스 라이브러리 네임 스페이스:
  • System.IO
  • System.Security
  • System.Security.Cryptography

이 작업에서는

요약

Microsoft.NET Framework 제공 하는 암호화 클래스를 사용 하는 방법을 설명 합니다. 텍스트 파일을 읽을 수 없는 상태로 암호화 하는 암호화 클래스를 사용할 수 있습니다. 그런 다음 다시 원래 형식으로 텍스트 파일을 해독할 수 있습니다.

맨 위로

요구 사항

다음은 권장된 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩입니다.
  • Microsoft Windows XP, Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 고급 서버 또는 Microsoft Windows NT 4.0 서버
  • Microsoft Visual Studio.NET 또는 Microsoft Visual Studio 2005
맨 위로

사용 하 여 암호화 및 암호 해독

System.Security.Cryptographic 네임 스페이스는.NET Framework는 다양 한 암호화 및 암호 해독을 지원 하기 위해 도구를 제공 합니다. CryptoStream 클래스에 제공 되는 클래스 중 하나입니다. CryptoStream 클래스는 암호화 하거나 콘텐츠 파일을 스트림을 해독 하는 데 설계 되었습니다.

파일을 암호화 하려면 다음과이 같이 하십시오.
  1. 실행된 Visual Studio.NET 또는 Visual Studio 2005.
  2. Visual Basic 2005 또는 Visual Basic.NET에서 새 콘솔 응용 프로그램을 만듭니다. 모듈을 함께 빈 main () 프로시저가 만들어집니다.
  3. Imports 문을 사용 하 여 System 네임 스페이스, System.Security 네임 스페이스, System.Security.Cryptography 네임 스페이스, System.Text 네임 스페이스와 System.IO 네임 스페이스에 있습니다. 코드에서이 네임 스페이스의 선언을 한정 있지 이렇게 해야 합니다. 이 명령문은 항상 선언 앞에 사용 해야 합니다.
    Imports SystemImports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text

  4. 비밀 키를 암호화 하 고 해독할 데이터를 생성 합니다. DESCryptoServiceProvider 클래스는 대칭 암호화 알고리즘을 기반으로 합니다. 대칭 암호화는 키와 초기화 벡터 (IV) 데이터를 암호화 해야 합니다. 데이터를 해독 하려면 키 및 IV 동일한 있어야 합니다. 동일한 암호화 알고리즘을 사용 해야 합니다. 다음 방법 중 하나를 사용 하 여 키를 생성할 수 있습니다.
    • 방법 1 사용자는 암호를 입력할 수 있습니다. 그런 다음 암호를 사용 하 여 키와 IV.
    • 방법 2 대칭 암호화 클래스의 새 인스턴스를 만들면 새 키와 새 IV 자동으로 만들어집니다 세션. 키 및 IV는 관리 되는 대칭 암호화 클래스 파일의 암호 해독 하 고 암호화 하 여 생성 되는 규칙을 사용할 수 있습니다.

      생성 하 고 키를 배포 하는 방법에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하거나.NET Framework 소프트웨어 개발 키트 (SDK) 설명서를 참조 하십시오.

      http://msdn.microsoft.com/en-us/library/5e9ft273(VS.71).aspx
  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. FileStream 개체 입력된 및 출력 만듭니다 EncryptFile 절차에서 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 네임 스페이스는 GetBytes()라는 함수를 제공 합니다. 인코딩 기능 중 일부로, GetBytes() 함수는 문자열을 바이트 배열로 반환 합니다. 키의 크기는 각각의 암호화 기술에 대 한 차이가 있습니다. 예를 들어, 데이터 암호화 표준 (DES) 8 자 또는 8 바이트와 같은 64 비트 키를 사용 합니다.

    키를 제공 하지 않는 공급자 임의로 생성 됩니다. 성공적으로 암호화 된 파일은 파일의 암호를 해독할 수 없습니다. 참고도 제공 해야 합니다 IV. 이 값은 암호화의 일부로 사용 됩니다. 키와 값을 지정 하지 않으면 IV 임의로 생성 됩니다. 값은 암호화와 해독 모두에 대해 동일 해야 합니다, 때문에 이러한 값의 랜덤 생성을 금지 해야 합니다.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

  10. CryptoStream 클래스의 인스턴스를 만듭니다. 암호화 공급자를 사용 하 여 암호화 개체 (CreateEncryptor)를 입출력 기존 FileStream 개체 생성자의 일부로.
    Dim cryptostream As New CryptoStream(fsEncrypted, _                                     desencrypt, _
    CryptoStreamMode.Write)

  11. 입력된 파일에서 읽고 출력 파일에 기록 합니다. 사용자가 제공한 키를 사용 하 여 파일이 암호화 되어 있는 CryptoStream 개체를 통해 전달 합니다.
    Dim bytearrayinput(fsInput.Length - 1) As BytefsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)

파일의 암호를 해독 하려면 다음과이 같이 하십시오.
  1. DecryptFile라는 메서드를 만듭니다. 암호를 해독 하는 암호화 프로세스와 비슷합니다. 그러나 DecryptFileEncryptFile 프로시저의 두 가지 주요 차이점이 있습니다.
    • CreateDecryptor CryptoStream 개체 사용 방법을 지정 하는 개체를 만드는 CreateEncryptor 대신 사용 됩니다.
    • 해독된 된 텍스트를 대상 파일에 쓸 때 CryptoStream 개체는 대상 스트림이 아닌 원본 되었습니다.
    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. EncryptFileDecryptFile모두 호출할 main () 프로시저에 다음 줄을 추가 합니다.
        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. 파일을 저장합니다. 응용 프로그램을 실행 합니다. 입력된 파일 이름에 사용 되는 경로 기존와 중요 하지 않은 파일을 가리키는지 확인 하십시오.
맨 위로

암호화와 해독 작동 하는지 확인 하십시오.

파일이 올바르게 암호화 및 해독을 확인 하는 텍스트 (.txt) 파일을 사용 하 여이 코드를 테스트 합니다. 해독 해야 (이 문서의 Sub main () 프로시저) 것 처럼 새 파일에 파일이 아닌 원본 파일을 확인 하십시오. 해독된 된 파일을 검사 하 고 원본과 해독된 된 파일을 비교.

맨 위로

전체 코드 목록

Imports SystemImports 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

맨 위로

참조

암호화 및.NET의 암호화 기능을 사용 하는 방법에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.

http://msdn.microsoft.com/net

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

맨 위로
속성

문서 ID: 301070 - 마지막 검토: 2017. 2. 6. - 수정: 2

피드백