2016-10-06 6 views
-1

私はinfopathの添付ファイルの暗号化されたエンコードされた文字列を受け取り、解読するc#コードを持っています。これは以下のコードである:Attachment Decryption System.FormatException:Base-64 char配列または文字列の長さが無効です

private int fileSize; 
    private int attachmentNameLength; 
    private string attachmentName; 
    private byte[] decodedAttachment; 


    /// <summary> 
    /// Accepts the Base64 encoded string 
    /// that is the attachment. 
    /// </summary> 
    public InfoPathAttachmentDecoder(string theBase64EncodedString) 
    { 
     **byte[] theData =  Convert.FromBase64String(theBase64EncodedString);** //This line throws a System.FormatException: Invalid length for a Base-64 char array or string. 
     using (MemoryStream ms = new MemoryStream(theData)) 
     { 
      BinaryReader theReader = new BinaryReader(ms); 
      DecodeAttachment(theReader); 
     } 
    } 

    private void DecodeAttachment(BinaryReader theReader) 
    { 
     //Position the reader to obtain the file size. 
     byte[] headerData = new byte[FIXED_HEADER]; 
     headerData = theReader.ReadBytes(headerData.Length); 

     fileSize = (int)theReader.ReadUInt32(); 
     attachmentNameLength = (int)theReader.ReadUInt32() * 2; 

     byte[] fileNameBytes = theReader.ReadBytes(attachmentNameLength); 
     //InfoPath uses UTF8 encoding. 
     Encoding enc = Encoding.Unicode; 
     attachmentName = enc.GetString(fileNameBytes, 0, attachmentNameLength - 2); 
     decodedAttachment = theReader.ReadBytes(fileSize); 
    } 

    public void SaveAttachment(string saveLocation) 
    { 
     string fullFileName = saveLocation; 
     if (!fullFileName.EndsWith(Path.DirectorySeparatorChar.ToString())) 
     { 
      fullFileName += Path.DirectorySeparatorChar; 
     } 

     fullFileName += attachmentName; 

     if (File.Exists(fullFileName)) 
      File.Delete(fullFileName); 

     FileStream fs = new FileStream(fullFileName, FileMode.CreateNew); 
     BinaryWriter bw = new BinaryWriter(fs); 
     bw.Write(decodedAttachment); 

     bw.Close(); 
     fs.Close(); 
    } 

    public string Filename 
    { 
     get { return attachmentName; } 
    } 

    public byte[] DecodedAttachment 
    { 
     get { return decodedAttachment; } 
    } 

} 

ライン・バイト[] theData = Convert.FromBase64String(theBase64EncodedString)。ベース64の配列または文字列に対して、システム書式例外の無効な長さをスローします。

+0

1.コード内の暗号化があります。 2. Base64でエンコードされた文字列は、4バイトの倍数でなければなりません。 3.問題のあるBase64文字列はどこにありますか? – zaph

+0

x0lGQRQAAAABAAAAAAAAAH8IAAALAAAAdABlAHMAdAAwADEALgB0AHgAdAAAAHVzaW5nIFN5c3RlbTsNCnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOw0KdXNpbmcgU3lzdGVtLkxpbnE7DQp1c2luZyBTeXN0ZW0uV2ViOw0KdXNpbmcgU3lzdGVtLldlYi5NdmM7DQoNCm5hbWVzcGFjZSBNb3ZpZXNBcHAuQ29udHJvbGxlcnM –

+0

**は誰もがそれを見るウィルの質問に追加informatiin **を追加して、暗号化は例えばInfoPathで行われ、私は、アップロードされた文書が暗号化されています。その後、このコメントを削除します。 – zaph

答えて

0

あなたが持っているものは、Base64でエンコードされていないもので、tqoセクションに妥協しているようです。

が提供する「Base64でデータ:

x0lGQRQAAAABAAAAAAAAAH8IAAALAAAAdABlAHMAdAAwADEALgB0AHgAdAAA AHVzaW5nIFN5c3RlbTsN CnVzaW5nIFN5c3RlbS5D b2xsZWN0aW9ucy5HZW5l cmljOw0KdXNpbmcgU3lz dGVtLkxpbnE7DQp1c2lu ZyBTeXN0ZW0uV2ViOw0K dXNpbmcgU3lzdGVtLldl Yi5NdmM7DQoNCm5hbWVz cGFjZSBNb3ZpZXNBcHAu Q29udHJvbGxlcnM

これは暗号化されていないデータによる繰り返し文字。

あなたはデータの進値を見ればあなたが表示されます。

78306c4751525141414141424141414141414141414838494141414c414141416441426c41484d4164414177414445414c6742304148674164414141e2808ce2808b4148567a6157356e49464e356333526c6254734ee2808ce2808b436e567a6157356e49464e356333526c62533544e2808ce2808b623278735a574e3061573975637935485a57356ce2808ce2808b636d6c6a4f77304b64584e70626d636755336c7ae2808ce2808b644756744c6b7870626e45374451703163326c75e2808ce2808b5a79425465584e305a573075563256694f77304be2808ce2808b64584e70626d636755336c7a644756744c6c646ce2808ce2808b5969354e646d4d3744516f4e436d35686257567ae2808ce2808b6347466a5a53424e62335a705a584e4263484175e2808ce2808b5132397564484a766247786c636e4d

0xe2、0x80、0x8c、0xe2、0x80、0x8bなどのBase64文字セットの文字が存在することに注意してください。

さらに、2つの部分があるようですが、60バイトの初期セクションがあり、これはBase64と思われます。 Base64でヘクスにデコードそのセクションは次のとおりです。

EFCDF4E9CE3BE75E​​76E75E35E35E35E35E36E35E35E35E35E35E35E35E35E35E3CDFCE3DE35E35E35E1CE35E35E35E35EB8E35E36E9CE35E3CE1DE35EB8E35E35EFBE35E38E39E35E1CEBBE36DF4E35E3CEBBE35EB8E35E35E35

関連する問題