HOWTO: Visual Basic .NET을 사용하여 파일 암호화 및 해독

기술 자료 번역 기술 자료 번역
기술 자료: 301070 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR301070
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 Microsoft .NET Framework에서 제공하는 암호화 클래스를 사용하여 텍스트 파일을 읽을 수 없는 상태로 암호화했다가 다시 원본 파일 형식으로 해독하는 방법을 보여줍니다.

요구 사항

다음은 권장 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩 목록입니다.
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server 또는 Windows NT 4.0 Server
  • Microsoft Visual Studio .NET

암호화 및 해독

Microsoft .NET Framework의 System.Security.Cryptographic 네임스페이스에서는 여러 가지 유용한 암호화 및 해독 도구를 제공합니다. CryptoStream 클래스는 이러한 용도로 제공되는 수많은 클래스 중 하나로, 파일 내용을 유연하게 암호화하거나 해독합니다.

파일을 암호화하려면 다음과 같이 하십시오.
  1. Visual Studio .NET을 엽니다.
  2. Microsoft Visual Basic .NET에서 새 콘솔 응용 프로그램을 만듭니다. 그러면 Visual Basic .NET에서 빈 Main() 프로시저가 있는 모듈을 자동으로 만듭니다.
  3. System, System.SecuritySystem.Security.Cryptography, System.TextSystem.IO 네임스페이스에 Imports 문을 사용합니다. 그러면 나중에 코드에서 이 네임스페이스의 선언을 한정하지 않아도 됩니다. 이 명령문은 항상 선언 앞에 사용해야 합니다.
    Imports System
    Imports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Text
  4. 암호화/해독용 비밀 키를 나타내는 상수를 클래스나 모듈에 추가합니다.
    'Must be 64 bits, 8 bytes.
    Private Const sSecretKey As String = "Password"
  5. 클래스 내에서 세 개의 매개 변수, 즉 sInputFile, sOutputFilesKey(파일 암호화/해독에 사용되는 비밀 키)가 있는 EncryptFile이라는 메서드를 만듭니다.
        Sub EncryptFile(ByVal sInputFilename As String, _
                       ByVal sOutputFilename As String, _
                       ByVal sKey As String)
        End Sub
  6. EncryptFile 프로시저에서 대상 파일에 대한 읽기/쓰기를 처리하는 입력 및 출력 FileStream 개체를 만듭니다.
            Dim fsInput As New FileStream(sInputFilename, _
                                        FileMode.Open, FileAccess.Read)
            Dim fsEncrypted As New FileStream(sOutputFilename, _
                                        FileMode.Create, FileAccess.Write)
  7. 파일에 사용할 실제 암호화 및 해독 기술을 나타내는 DESCryptoServiceProvider 클래스의 인스턴스를 선언합니다. 이제 다른 공급자를 만들어 RSA나 다른 암호화 기술을 사용할 수 있습니다.
    Dim DES As New DESCryptoServiceProvider()
  8. 암호화 공급자를 제공할 때는 비밀 키(바이트 배열)를 함께 제공해야 합니다. System.Text 네임스페이스의 인코딩 기능 중에는 문자열을 사용하여 바이트 배열을 반환하는 유용한 GetBytes() 함수가 포함되어 있습니다. 키의 크기는 각각의 암호화 기술마다 다른데, DES에서는 8바이트나 8문자에 해당하는 64비트 키를 사용합니다.

    키를 제공하지 않으면 공급자가 키를 임의로 생성하므로 파일이 해독할 수 없는 상태로 인코딩됩니다. 또한 초기화 벡터(IV)도 제공해야 하는데, 이 값은 암호화 과정에서 사용되며 제공하지 않은 경우 임의로 생성됩니다. 이 값은 암호화와 해독에서 모두 같아야 하므로 임의로 생성하지 않는 것이 좋습니다.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
  9. 암호화 공급자를 사용하여 암호화 개체(CreateEncryptor)와 기존 출력 FileStream 개체를 생성자에 포함시키는 CryptoStream 클래스의 인스턴스를 만듭니다.
    Dim cryptostream As New CryptoStream(fsEncrypted, _
                                         desencrypt, _
                                         CryptoStreamMode.Write)
  10. 마지막으로, 입력 파일을 읽고 CryptoStream 개체를 통과하는 출력 파일에 이를 기록합니다. 이렇게 기록한 내용은 제공된 키를 사용하여 암호화됩니다.
    Dim bytearrayinput(fsInput.Length - 1) As Byte
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
  11. DecryptFile이라는 메서드를 만듭니다. 해독 과정은 암호화 과정과 매우 비슷한데, DecryptFile 프로시저는 EncryptFile 프로시저와 두 가지 사항이 크게 다릅니다. 첫째, CryptoStream 개체를 만들 때 CreateEncryptor가 아닌 CreateDecryptor가 개체 사용 방법을 지정합니다. 둘째, 해독된 텍스트를 대상 파일에 기록할 때 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 IV is 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 file stream to read encrypted file back
        Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
        'create DES Decryptor from our des instance
        Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
        'create crypto stream set to read and 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
  12. EncryptFile과 DecryptFile을 둘 다 호출하는 줄을 Main() 프로시저에 추가합니다.
    Public Sub Main()
        EncryptFile("c:\temp\test.txt", _
                        "c:\temp\Encrypted.txt", _
                        sSecretKey)
        DecryptFile("c:\temp\Encrypted.txt", _
                    "c:\temp\Decrypted.txt", _
                    sSecretKey)
    End Sub
  13. 응용 프로그램을 저장한 다음 실행합니다. 이 때 입력 파일 이름에 사용되는 경로는 그다지 중요하지 않은 기존 파일을 가리켜야 합니다.

작동 여부 확인

텍스트 파일(.txt)에서 이 코드를 테스트하여 파일이 올바르게 암호화/해독되는지 확인합니다. 파일을 해독할 때는 원본 파일에 해독하지 말고 이 문서의 Sub Main() 프로시저에 있는 것처럼 새 파일에 해독해야 합니다. 해독된 파일을 검사하고 원본과 비교합니다.

전체 코드 예제

 Imports System Imports System.IO Imports System.Security Imports System.Security.Cryptography Imports System.Text   Module Module1     'Must be 64 bits, 8 bytes.     Private Const sSecretKey As String = "Password"      Public Sub Main()         EncryptFile("c:\temp\test.txt", _                         "c:\temp\Encrypted.txt", _                         sSecretKey)         DecryptFile("c:\temp\Encrypted.txt", _                     "c:\temp\Decrypted.txt", _                     sSecretKey)     End Sub      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 IV is required for this provider         DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)          'Set initialization vector.         DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)          'create DES Encryptor from this instance         Dim desencrypt As ICryptoTransform = DES.CreateEncryptor()         'Create Crypto Stream that transforms file stream using des encryption         Dim cryptostream As New CryptoStream(fsEncrypted, _                                             desencrypt, _                                             CryptoStreamMode.Write)          'Read the file text into our byte array         Dim bytearrayinput(fsInput.Length - 1) As Byte         fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)         'write out 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 IV is 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 file stream to read encrypted file back         Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)         'create DES Decryptor from our des instance         Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()         'create crypto stream set to read and 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  End Module

참조

.NET의 암호화 기능 사용과 일반적인 암호화에 대한 자세한 내용은 다음 웹 사이트를 참조하십시오.

속성

기술 자료: 301070 - 마지막 검토: 2002년 1월 15일 화요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Basic .NET 2002 Standard Edition
키워드:?
kbhowto kbhowtomaster KB301070

피드백 보내기

 

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