2011-10-11 3 views
0

2007 Office 문서를 암호화하고 해독하려고합니다. , PPTX 및 DOCX 파일을 나는 파일이 txt, 나는 다음과 같은 코드Office 2007 문서 암호화 및 암호 해독

using System; 
using System.IO; 
using System.Security; 
using System.Security.Cryptography; 
using System.Runtime.InteropServices; 
using System.Text; 

namespace CSEncryptDecrypt 
{ 
class Class1 
{ 
    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(); 

     // Encrypt the file.   
     EncryptionHelper.EncryptFile(@"XCD - FTW Proposal.docx", 
      @"Encrypted.txt", 
      sSecretKey); 

     // Decrypt the file. 
     EncryptionHelper.DecryptFile(@"Encrypted.txt", 
      @"OUTPUT\XCD - FTW Proposal.docx", 
      sSecretKey); 
    } 

    // 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); 
    } 
    } 
    public class EncryptionHelper 
    { 
       public static void EncryptFile(string sInputFilename, string sOutputFilename, string sKey) 
     { 

      //GCHandle gch = GCHandle.Alloc(sKey, GCHandleType.Pinned); 
      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); 
     DES.Padding = PaddingMode.PKCS7; 

     //DES.Padding = PaddingMode.ANSIX923; 
     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.Flush(); 
     cryptostream.Close(); 
     fsInput.Flush(); 
     fsInput.Close(); 
     fsEncrypted.Close(); 

    } 

    public 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); 
     FileStream fsEncrypted = new FileStream(sOutputFilename, 
     FileMode.Create, 
     FileAccess.Write); 
     //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); 
     byte[] fileData = new byte[fsread.Length]; 
     cryptostreamDecr.Read(fileData, 0, (int)fsread.Length); 
     fsEncrypted.Write(fileData, 0, fileData.Length); 
     fsread.Flush(); 
     fsread.Close(); 
     fsEncrypted.Flush(); 
     fsEncrypted.Close(); 
     cryptostreamDecr.Flush(); 
     cryptostreamDecr.Close(); 
    } 
} 
} 

위의 코드는 문서, XLS, PPT 잘 동작을 사용하고 System.Security.Cryptographic 네임 스페이스

를 사용하고 있지만, .XLSX currupts . 파일을 열려고하면 파일이 손상되었다는 복구 창이 나타납니다. 어떤 생각입니까? 내가 크기의 버퍼를 사용할 때 나는 그러나 같은 문제에 직면하고있다

+1

XLSX를 감지 할 수있는 별도의 추가 바이트 및 Office Suite 소프트웨어의 무리가 생각 사라 , pptx 및 docx는 기본적으로 zip 파일입니다. 코드에서 .zip 아카이브가 손상 되었습니까? –

답변

0

1 (쓸모없는) 문제가 나는 등의 조작 = \