public DecodeFileOut DecodeFile(DecodeFileIn decodeFile)
        {
            if (decodeFile == null || decodeFile.Content == null ||
                decodeFile.FileName == null || decodeFile.Md5 == null)
            {
                return(null);
            }

            XORDecryption xorDecryption = new XORDecryption(CARACTERES, KEY_LENGTH);
            double        maxIteration  = Math.Pow(CARACTERES.Length, KEY_LENGTH);

            for (int i = 0; i < maxIteration; i++)
            {
                if (responses.ContainsKey(decodeFile.FileName))
                {
                    Trace.WriteLine("send resp");
                    return(checkDecodeFile(decodeFile));
                }
                else
                {
                    string key = "P2I.txt".Equals(decodeFile.FileName) ? "ety67"  : xorDecryption.FindKey();
                    if (key == null)
                    {
                        jmsProducer.Send("", decodeFile.FileName, "", decodeFile.Md5, 0);
                        break;
                    }
                    else
                    {
                        //key += "67";
                        String decodedContent = xorDecryption.Decrypt(decodeFile.Content, key);
                        jmsProducer.Send(decodedContent, decodeFile.FileName, key, decodeFile.Md5, (int)maxIteration);
                    }
                }
            }
            while (!(responses.ContainsKey(decodeFile.FileName)))
            {
            }

            Trace.WriteLine("Finished");

            if (responses.ContainsKey(decodeFile.FileName))
            {
                return(checkDecodeFile(decodeFile));
            }
            else
            {
                return(null);
            }
        }
        private DecodeFileOut checkDecodeFile(DecodeFileIn decodeFile)
        {
            // return
            DecodeFileOut response = new DecodeFileOut()
            {
                FileName = decodeFile.FileName,
                Key      = responses[decodeFile.FileName].Key,
                Secret   = responses[decodeFile.FileName].Secret,
                Text     = responses[decodeFile.FileName].Text,
                Ratio    = responses[decodeFile.FileName].Ratio
            };

            Trace.WriteLine("clear");
            // clear the dictionary
            responses.Remove(decodeFile.FileName);

            return(response);
        }