C#팁

C#에서 파일 입출력 한다고 ms사에서 나온 예제 코드 하는데 복호화 하는데 문제가 있습니 두들기기 평점: 없음 조회: 1572
namespace fileencrytionPROTO
{
    class Class1
    {
        //  Call this function to remove the key from memory after use for security
        [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint = "RtlZeroMemory")]
        public static extern bool ZeroMemory(IntPtr Destination, int Length);
 
        // Function to Generate a 64 bits Key.
        static string GenerateKey()
        {
            // Create an instance of Symetric Algorithm. Key and IV is generated automatically.
            DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
 
            // Use the Automatically generated key for Encryption. 
            return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
        }
 
        static void EncryptFile(string sInputFilename,
           string sOutputFilename,
           string sKey)
        {
            FileStream fsInput = new FileStream(sInputFilename,
               FileMode.Open,
               FileAccess.Read);
 
            FileStream fsEncrypted = new FileStream(sOutputFilename,
               FileMode.Create,
               FileAccess.Write);
            DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            ICryptoTransform desencrypt = DES.CreateEncryptor();
            CryptoStream cryptostream = new CryptoStream(fsEncrypted,
               desencrypt,
               CryptoStreamMode.Write);
 
            byte[] bytearrayinput = new byte[fsInput.Length];
            fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.Close();
            fsInput.Close();
            fsEncrypted.Close();
        }
 
        static void DecryptFile(string sInputFilename,
           string sOutputFilename,
           string sKey)
        {
            DESCryptoServiceProvider DES = 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 a file stream to read the encrypted file back.
            FileStream fsread = new FileStream(sInputFilename,
               FileMode.Open,
               FileAccess.Read);
            //Create a DES decryptor from the DES instance.
            ICryptoTransform desdecrypt = DES.CreateDecryptor();
 
            //Create crypto stream set to read and do a 
            //DES decryption transform on incoming bytes.
            CryptoStream cryptostreamDecr = new CryptoStream(fsread,
               desdecrypt,
               CryptoStreamMode.Read);
 
            //Print the contents of the decrypted file.
            StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
            fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
            fsDecrypted.Flush();
            fsDecrypted.Close();
        }
 
        static void Main()
        {
            // Must be 64 bits, 8 bytes.
            // Distribute this key to the user who will decrypt this file.
            string sSecretKey;
 
            // Get the Key for the file to Encrypt.
            sSecretKey = GenerateKey();
 
            // For additional security Pin the key.
            GCHandle gch = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned);
 
            // Encrypt the file.        
            EncryptFile(@"D:\arrrrrrr.hwp",
               @"D:\Encrypted.txt",
               sSecretKey);
 
            // Decrypt the file.
            DecryptFile(@"D:\Encrypted.txt",
               @"D:\Decrypted.hwp",
               sSecretKey);
 
            // Remove the Key from memory. 
            ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
            gch.Free();
        }
    }
}





-----------------------------
요걸로 파일 암호화 복호화 하고 있는데 
이거뭐;;;;; 암호화는 잘됩니다 암호화는... 
근데 복호화에서 문제가 터지는데 
도통 뭐가 문제인지 알수가 없군요 

https://support.microsoft.com/ko-kr/help/307010/how-to-encrypt-and-decrypt-a-file-by-using-visual-c
에 있는 코드를 참조한 것입니다 
근데 왜 안되는걸까요 
키도 잘 잘 해놯고 했는데 
이상하게 복호화만 해독이 안되요 
태그 : descryption encryption
작성자 정보
두들기기
Level 9
 [EXP.11/14]

메일:  비공개
글등록 +12 72 덧글등록 +3 3
자기소개
안녕하세요
글 공유하기 |
  tweet facebook
2017-04-10 오후 10:42:29
나도한마디
사용자
동구밖과수원            [2017-04-11]
Level 30
 [EXP.48/50]
게시판을 잘못 선택 하셧어요.
영문 txt 파일 암호화/복호화는 잘될 것 같네요.
사용자
행숨            [2017-06-22]
Level 17
 [EXP.3/70]
정말로 암호화도 잘되는지궁금하군요.
사용자
타짜아니고초짜            [2017-07-17]
Level 1
 [EXP.6/16]
전 초보라서 정확히는 모르겠지만..
DecryptFile(@"D:\Encrypted.txt",
@"D:\Decrypted.hwp",
sSecretKey);
hwp 파일로 output 이 되나요??
사용자
달빛에취하다            [2017-08-31]
Level 2
 [EXP.1/16]
이거 답글이 안달리네요. 전체 소스 올려 드리려고 했더니..

복호화시 저장할때 파일은 유니코드로 저장되는 문제와 암호화된 파일이 1바이트 더 큰게 문제 입니다.

아래 댓글의 메서드 내용 확인 해보시고 변경해서 테스트 진행해 보세요.
사용자
달빛에취하다            [2017-08-31]
Level 2
 [EXP.1/16]
static void DecryptFile(string sInputFilename,
string sOutputFilename,
string sKey)
{
DESCryptoServiceProvider DES = 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 a file stream to read the encrypted file back.
FileStream fsread = new FileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);


//Create a DES decryptor from the DES instance.
ICryptoTransform desdecrypt = DES.CreateDecryptor();

//Create crypto stream set to read and do a
//DES decryption transform on incoming bytes.
CryptoStream cryptostreamDecr = new CryptoStream(fsread,
desdecrypt,
CryptoStreamMode.Read);

FileStream fsWriter = new FileStream(sOutputFilename,
FileMode.Create,
FileAccess.Write);

BinaryWriter bwr = new BinaryWriter(fsWriter);

byte[] bytearrayinput = new byte[fsread.Length - 1];

cryptostreamDecr.Read(bytearrayinput, 0, bytearrayinput.Length);

bwr.Write(bytearrayinput, 0, bytearrayinput.Length);

cryptostreamDecr.Flush();
fsWr
사용자
달빛에취하다            [2017-08-31]
Level 2
 [EXP.1/16]
static void EncryptFile(string sInputFilename,
string sOutputFilename,
string sKey)
{


FileStream fsInput = new FileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);


FileStream fsEncrypted = new FileStream(sOutputFilename,
FileMode.Create,
FileAccess.Write);

DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

ICryptoTransform desencrypt = DES.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fsEncrypted,
desencrypt,
CryptoStreamMode.Write);


BinaryReader br = new BinaryReader(fsInput);

byte[] bytearrayinput = br.ReadBytes((int)fsInput.Length);

cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Flush();
fsEncrypted.Flush();

cryptostream.Close();
fsInput.Close();
fsEncrypted.Close();
}
태그로 엮인글
글리스트
C#으로 시리얼통신을 해보자! 데이터의 수신과 분석을 분리편.[5] 파일첨부 아이프리드
 ★현재글->   C#에서 파일 입출력 한다고 ms사에서 나온 예제 코드 하는데 복호화 하는데 문제가 있습니[4]+2  두들기기
비동기 소켓 프로그래밍에 대해 질문이 있습니다... ㅠㅠ[1]  궁금해욥
딕션어리 vs 데이터 테이블(값이 자주 변경)[2]  레미콘
C#으로 시리얼통신을 해보자! 시리얼 통신의 원리부터 구현까지[17] 파일첨부 아이프리드
트리뷰 + - 버튼을 이미지로 바꿀 수 있나요 ?[1]+1  훈스훈스훈스
안녕하세요. PartialView에 대한 질문 드립니다.[3] 파일첨부 노찬이
두 가지 간단한 질문..[2]+1  븅멍뭉친구
OS X의 파일명의 한글 자모음이 분리되어 보이는 경우[4]  sa2랑
달력컨트롤 예시 입니다.[5] 파일첨부 방랑개죽
WinForm 투명 컨트롤 ~ 작은 경험 하나 공유합니다.[3]+1  Booh
Hoons.net에 게시물에 소스코드를 이쁘게 넣고 싶다!! 하시는분들...[5]  아이프리드