点击这里下载(包含源代码,.NET)
说明:
1、什么是“简单异或”加密算法?
简单异或加密算法的意思就是,直接将密钥和明文进行异或操作,不断循环,直到明文被加密位置。密钥不等同于密码,密钥通常都是经过密码学散列函数进行散列得到的,具有数学意义上面的随机性特征,因此密钥通常都不会暴露太多的特征信息。然而普通的密码由于比较集中于可见字符,因此有统计学意义上面的特征,很容易在密文当中暴露出密码的部分信息。
在这个程序里面,密钥是通过一个强随机性的随机数发生器产生的,因此无需担心密钥本身的安全性。该加密算法的核心部分大致如下:
2、本破解程序的适用范围?
本破解程序只是破解用该程序的加密函数进行加密的档案,并且该档案限定于必须是类似文本文件这样的,有着较为明显的字符频谱特征的,熵值较高的信息。直白的说就是某些二进制的值必须比另外一些二进制值的频率要高得多,否则虽然仍然有可能破解,但是可能性会比较低。此外较为次要的一点就是,这个文本必须能够提供相同的或者近似的范本。范本的作用就是为了统计这类文档当中各个字符的频谱特征,如果无法提供有效的范本,则分析成功率也会大大降低。
本破解程序所破解的异或加密算法的密钥是以字节作为基本单位的,实际上稍加改造也能够适应予以比特为密钥基本单位的简单异或加密算法。但是为了演示程序能够简单易懂,这里采取了以字节作为基本单位。
3、本破解演示程序的使用方法:
界面上面有三个按钮,一个用于重新产生密钥,一个用于选择被加密的文件,还有一个则进行密码分析操作。使用时请尽量打开C#或者VB等源代码文件作为加密及破解分析使用,打开一个特定的文件之后就可以开始进行密码分析了。在任何时候都可以改变密钥长度(并改变密钥),或者不改变长度仅仅重新生成新的密钥,或者更换用于加密并分析的文件,然后再次进行分析。点击分析按钮之后就会立刻产生分析数据,其中会输出大量中间数据,如果感兴趣的话可以看原文件当中的相关注释。输出数据的最后几行就是分析出来的密钥内容,这里会输出两组密钥,例如:
1F 2C 3D 44 58
E1 4D EF 88 6A
其含义是,密钥的第一个字节是1F或者E1,第二个字节是2C或者4D……以此类推,无法直接推出真正密钥的原因请看源代码的相关注释。
界面上有四个主要的文本框,从上到下分别是:用十六进制的方式显示密钥内容,用文本的方式显示明文的内容,用文本方式显示加密过后的密文内容,以及显示分析结果。
这个分析程序当中的明文字符频率表是直接使用当前被用于加密的明文来进行分析的,因此密钥被成功分析的可能性比较高。当然,您也可以改造成根据其它文本的分析得到频率表,但这样的话成功率就不能够保证了——如果范本和明文是类似的,甚至是近似的,那么分析成功率还是应当相当的高的!
具体不多说了,自己下载下来再研究吧。
说明:
1、什么是“简单异或”加密算法?
简单异或加密算法的意思就是,直接将密钥和明文进行异或操作,不断循环,直到明文被加密位置。密钥不等同于密码,密钥通常都是经过密码学散列函数进行散列得到的,具有数学意义上面的随机性特征,因此密钥通常都不会暴露太多的特征信息。然而普通的密码由于比较集中于可见字符,因此有统计学意义上面的特征,很容易在密文当中暴露出密码的部分信息。
在这个程序里面,密钥是通过一个强随机性的随机数发生器产生的,因此无需担心密钥本身的安全性。该加密算法的核心部分大致如下:
/// <summary>
/// 加密函数,一个非常典型的异或加密方法。
/// </summary>
private void Encrypt()
{
encrypted = Encoding.Default.GetBytes(txContext.Text);
buffLen = encrypted.Length;
int klen = key.Length;
int i, len = encrypted.Length;
byte curByte;
if (klen == 0) return;
txResult.Text += " Encrypting ";
for (i = 0; i < len; i++)
{
curByte = encrypted[i];
if (curByte != 0)
encrypted[i] = (byte) (curByte ^ key[i % klen]);
}
txEncrypted.Text = Encoding.Default.GetString(encrypted);
}
/// 加密函数,一个非常典型的异或加密方法。
/// </summary>
private void Encrypt()
{
encrypted = Encoding.Default.GetBytes(txContext.Text);
buffLen = encrypted.Length;
int klen = key.Length;
int i, len = encrypted.Length;
byte curByte;
if (klen == 0) return;
txResult.Text += " Encrypting ";
for (i = 0; i < len; i++)
{
curByte = encrypted[i];
if (curByte != 0)
encrypted[i] = (byte) (curByte ^ key[i % klen]);
}
txEncrypted.Text = Encoding.Default.GetString(encrypted);
}
2、本破解程序的适用范围?
本破解程序只是破解用该程序的加密函数进行加密的档案,并且该档案限定于必须是类似文本文件这样的,有着较为明显的字符频谱特征的,熵值较高的信息。直白的说就是某些二进制的值必须比另外一些二进制值的频率要高得多,否则虽然仍然有可能破解,但是可能性会比较低。此外较为次要的一点就是,这个文本必须能够提供相同的或者近似的范本。范本的作用就是为了统计这类文档当中各个字符的频谱特征,如果无法提供有效的范本,则分析成功率也会大大降低。
本破解程序所破解的异或加密算法的密钥是以字节作为基本单位的,实际上稍加改造也能够适应予以比特为密钥基本单位的简单异或加密算法。但是为了演示程序能够简单易懂,这里采取了以字节作为基本单位。
3、本破解演示程序的使用方法:
界面上面有三个按钮,一个用于重新产生密钥,一个用于选择被加密的文件,还有一个则进行密码分析操作。使用时请尽量打开C#或者VB等源代码文件作为加密及破解分析使用,打开一个特定的文件之后就可以开始进行密码分析了。在任何时候都可以改变密钥长度(并改变密钥),或者不改变长度仅仅重新生成新的密钥,或者更换用于加密并分析的文件,然后再次进行分析。点击分析按钮之后就会立刻产生分析数据,其中会输出大量中间数据,如果感兴趣的话可以看原文件当中的相关注释。输出数据的最后几行就是分析出来的密钥内容,这里会输出两组密钥,例如:
1F 2C 3D 44 58
E1 4D EF 88 6A
其含义是,密钥的第一个字节是1F或者E1,第二个字节是2C或者4D……以此类推,无法直接推出真正密钥的原因请看源代码的相关注释。
界面上有四个主要的文本框,从上到下分别是:用十六进制的方式显示密钥内容,用文本的方式显示明文的内容,用文本方式显示加密过后的密文内容,以及显示分析结果。
这个分析程序当中的明文字符频率表是直接使用当前被用于加密的明文来进行分析的,因此密钥被成功分析的可能性比较高。当然,您也可以改造成根据其它文本的分析得到频率表,但这样的话成功率就不能够保证了——如果范本和明文是类似的,甚至是近似的,那么分析成功率还是应当相当的高的!
具体不多说了,自己下载下来再研究吧。