-1

I have a c# code which takes the encrypted encoded string of an attachment in infopath and decrypts it. This is the code below:

    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; }
    }

}

The line byte[] theData = Convert.FromBase64String(theBase64EncodedString); throws a system format exception invalid length for a base 64 array or string.

Tolu Ajayi
  • 31
  • 2
  • 9
  • 1. Where is there encryption in the code. 2. Base64 encoded strings must be a multiple of 4-bytes. 3. Where is the Base64 string that you are having trouble with? – zaph Oct 07 '16 at 01:32
  • The encryption is done in infopath e.g a document I uploaded is encrypted as x0lGQRQAAAABAAAAAAAAAH8IAAALAAAAdABlAHMAdAAwADEALgB0AHgAdAAAAHVzaW5nIFN5c3RlbTsNCnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOw0KdXNpbmcgU3lzdGVtLkxpbnE7DQp1c2luZyBTeXN0ZW0uV2ViOw0KdXNpbmcgU3lzdGVtLldlYi5NdmM7DQoNCm5hbWVzcGFjZSBNb3ZpZXNBcHAuQ29udHJvbGxlcnM – Tolu Ajayi Oct 07 '16 at 08:22
  • Add the additional informatiin **to the question** so everyone wil see it. Then delete this comment. – zaph Oct 07 '16 at 11:12

1 Answers1

0

What you have is not Base64 encoded and seems to be compromized of tqo sections.

The provided "Base64 data:

x0lGQRQAAAABAAAAAAAAAH8IAAALAAAAdABlAHMAdAAwADEALgB0AHgAdAAA‌​AHVzaW5nIFN5c3RlbTsN‌​CnVzaW5nIFN5c3RlbS5D‌​b2xsZWN0aW9ucy5HZW5l‌​cmljOw0KdXNpbmcgU3lz‌​dGVtLkxpbnE7DQp1c2lu‌​ZyBTeXN0ZW0uV2ViOw0K‌​dXNpbmcgU3lzdGVtLldl‌​Yi5NdmM7DQoNCm5hbWVz‌​cGFjZSBNb3ZpZXNBcHAu‌​Q29udHJvbGxlcnM

This is not encrypted data due to repeated characters.

If you look at the hex values of the data you will see:

78306c4751525141414141424141414141414141414838494141414c414141416441426c41484d4164414177414445414c6742304148674164414141e2808ce2808b4148567a6157356e49464e356333526c6254734ee2808ce2808b436e567a6157356e49464e356333526c62533544e2808ce2808b623278735a574e3061573975637935485a57356ce2808ce2808b636d6c6a4f77304b64584e70626d636755336c7ae2808ce2808b644756744c6b7870626e45374451703163326c75e2808ce2808b5a79425465584e305a573075563256694f77304be2808ce2808b64584e70626d636755336c7a644756744c6c646ce2808ce2808b5969354e646d4d3744516f4e436d35686257567ae2808ce2808b6347466a5a53424e62335a705a584e4263484175e2808ce2808b5132397564484a766247786c636e4d

Note that there are characters out of the Base64 character set such as 0xe2, 0x80, 0x8c, 0xe2, 0x80, 0x8b.

Additionaly there seem to be two parts, there is an initial section of 60 byte that does seem to be Base64. That section Base64 decoded to hex is:

EFCDF4E9CE3BE75E76E75E35E35E35E35E36E35E35E35E35E35E35E35E35E35E3CDFCE3DE35E35E35E1CE35E35E35E35EB8E35E36E9CE35E3CE1DE35EB8E35E35EFBE35E38E39E35E1CEBBE36DF4E35E3CEBBE35EB8E35E35E35

zaph
  • 111,848
  • 21
  • 189
  • 228