2013-01-11 56 views
1

我需要编写一个脚本,它将从客户端文件中提取所有数据,而无需启动它们创建的应用程序。应用程序保存所有数据都转换为XML文件,只在压缩文件之前对其中的内容进行加密,最后更改压缩文件的扩展名以使其“更难以识别”。如何在已知加密和未加密字符串的情况下解密XML文件中的字符串

该应用程序有一个文本查看器,它将显示客户端文件中的部分数据,但不是全部,使我的同事和我必须通过所有其他字段复制文本和标签的组合我们需要从中提取数据。试图使用应用程序本身很慢并且几乎没有用处,因为它具有可怕的内存问题,导致其不断崩溃。

无论如何 - 我能够弄清楚一些基础知识,因为加密看起来很弱,或者至少很容易看到它使用的模式。来自每台机器上每位客户的每个客户文件都将具有相同字符的相同输出。所有文件之间的加密是相同的。

它改变三个字符的块(在每个块的三个开始处添加一个字符),重新开始第四个。 =看起来是空字符。 例如:A成为QQ==AAQUE=AAAQUFBAAAAQUFBQQ==

我已经找到了基本知识,它只是一个一切都改变了Unicode字符的列表,例如QQ==AQg==B, Qc==C,我们移动到RA==对于D,RQ==对于E,并且通过字符表向前循环。

它开始变得有趣,当我们引入了第二和/或第三个字符的字符串,因为它现在已经ITA=!0,并向前像四个字母数字字符这样:ITE=!1ITY=!6,滚动返回ITc=!7,最多IT8=!>,然后移动到第二个位置的下一个字符,然后像​​那样从!?开始。等等。

无论如何,我会喜欢这里的一些事情的一些指针。我如何采取我所知道的并找到算法?从那里,我如何使用它来解密其余的数据?

回答

2

这不是加密,那是BASE64编码。这是一种仅使用64个可打印的ASCII字符编码二进制数据流的方法。通过可能无法正确处理二进制数据的通信通道(即二进制文件作为电子邮件附件)发送二进制数据时使用它。

每3个输入字符(24位)被编码为4个输出字符,其中只有64种可能性(每个字符6个有效位* 4 = 24位)。尾部=标志是填充。

在几乎所有主要语言(甚至XSLT(Google“XSLT base64”))中,都有用于转换BASE64和从BASE64转换的库方法。

甚至有一个website(实际上有几个)可以转换到BASE64或从BASE64转换。

+0

太棒了,谢谢。我会看看这个。对于这个愚蠢的问题感到抱歉:就像我说的,我从来没有做过这样的事情,所以这是全新的。 – frostilicus