异或思路解密
本帖最后由 a2601487 于 2018-3-25 16:13 编辑来到吾爱破解的时间也不长,看到的东西很多,也觉得自己很渺小。尝试过很多大牛的软件辅助,的确在学习方面跟工作方面得到不少的帮助,但总不能制作伸手党
下面我就根据我的显浅知识来说下关于加密解密方面的知识。主要面向小白,老手捂着嘴笑好了。。。(能力有限,不足之处敬请指出与原谅!!)
首先说一下异或加密解密原理吧!这就少不了计算机知识的补充了,计算机使用二进制的,就是0与1,我们通常逢10进1,而二进制就是逢2进1,就是说就算机
比较笨。。。虽然计算机只能识别0和1,但是这0和1有不同的排序组合序列就会有不同的信息呈现,(补充一下,其实计算机的二进制原理思想来自咱神洲大地,为什么?
不为什么,咱老祖宗牛啊,易经听过?没,那你就Low了,这易经里面的阴阳其实就是二进制的来源,算命的,风水的,阴阳家的,儒家,法家基本诸子百家的思想都源于
易经,易经这门学说,其实港真,以我的思维可能用十辈子都学不来,易经就是很科学,核心在于两个符号阴【两横】,阳【一横:长度等同于阴的两横】。阴与阳是一种
抽象符号,当然在某个领域阴与阳都会具象化,比如说性别,性格,水火。。。。阴阳相互组合出现不同的排序就会衍生不同的现象事情,简单类比成原子的排列顺序不同
会导致气态,液态,固态)这里二进制的0与1,是阴与阳的具象化。不扯了,二进制的话一般刚接触就4位,8位(0101,01011010)随意值,因为四位八位有一个便利性;
bin表示二进制 dec表示十进制
这里说下二进制与十进制的转换:bin1010 = dec10
思路:dec321 拆开来是不是等于 3×10×10 + 2×10 + 1因为进制是10 那么就很明显规律了,百位上(第三位)需要乘上两个10 ,十位上(第二位)需要乘上一个10
那么换做二进制也一样,bin1010 = 1×2×2×2 + 0×2×2 + 1×2 + 0×2 = 10 二进制转换为10进制
对于异或吧! 实际上是两个二进制数进行某种运算而得出另外一个结果,而这种运算就是异或
异或就是两个数组同数位上的两个数相运算,相同的为结果0,不同的结果为1 ;例子
数据A bin 1 0 1 0
数据B bin 0 1 1 0
不同 不同 同 同
结果 1 1 0 0
运算规则是同数位相同为0,不同为1
刚才说了电脑上只能识别二进制,那么换个说法就是其实我们所看见的所有电脑上的文件,包括文本,视频,音频 当前的网站都是0与1的进化版,所以很多文本文件出现乱码,
其中之一的就是对文本文件进行了异或加密,异或加密需要一个密钥。一个密钥一般是一个字节型大小的数值,为什么偏偏是一个字节的单位呢?因为电脑上(ascll)字符
【早期美国设定的标准好像:美国人用的是英文,而英文的单位是字母】一个字节就可以表示。就像上面说的如果结果 bin1100是乱码 ,那么数据B是密钥,数据A是原文。
因为结果通过密钥异或运算就可以得到源码,异或是双向运算。。。这么解释没错吧
好,思路:对于文本文件,TXT吧!很多时候都是空格居多,那么在乱码之后的文本文件会出现很多同一字符,那么就要看这个字符的二进制是什么了;我想说下,不能百分百准确
毕竟依靠个人经验,好,刚说完,异或运算是双向的,我们想要猜源码,那么就要先确定乱码,然后根据乱码跟源码之间的关系弄到密钥,有了密钥就可以大批量乱码还原。
举个例子说,某个(乱码)文本文件出现某个字符很多次数,那么这个字符可能是源码中的空格字符,那么第一步猜测乱码与源码,第二步猜测乱码与源码的异或关系,找到密钥
来上图:
错误部分:在于空格的Ascll码错了,(Space)的十六进制编码是20 ,X的十六进制没变,就是88
分隔符-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这个乱码文件的X字符好多,他的源码我猜测是空格;那好,查下X对应的二进制是(百度ASCLL)
二进制0101 1000十进制88十六进制58字符X
二进制0000 1001十进制9十六进制09字符空格
那么密钥就是十六进制的78 也就是二进制的 01111000 。获得密钥我对所有的文字进行异或解密
分隔符-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
首先我很感谢大家的支持,我第一次编辑的时候出现了一个小错误,就是ascll码出错了!但是思路没错的,具体的异或运算思路在下面
其实也算不上多高大上的技术,只是将学习中的应用到生活与工作,那么就可以变得很高级的样子吧...嗯,让我情不自禁皮了一下。学
习是阳,生活/工作是阴。要结合一下排序组合才会出现不一样的精彩嘛
乱码
原码
假设乱码是X ,对应的十六进制就是 58 二进制01001000
那么对应的原码应该是空格,space(空格)对应十六进制20,二进制00100000
求密钥就要逆向思维,将乱码/原码当做结果,毕竟双向运算,就可以求出密钥
原码 space 0 0 1 0 0 0 0 0
乱码 X 0 1 0 1 1 0 0 0
密钥 0 1 1 1 1 0 0 0
密钥就是十六进制的 78
这就是一种思路,可能源码不是空格,可以是其他符号,不过可以有这种思路,为日后破解多积累一分
{:301_1009:}其实这个思路可以应用于所有单表置换的加密,还可以考虑一下当使用一个key来异或加密的时候该怎么办呢~
eg:
char key[] = "thiskey";
for(i=0;i<len(text);i++)
{
text ^= key;
}
这个就是多表置换啦。 我是一楼吗! 对于异或,只需要知道逆运算就是再异或一次,比如C=A^B那么 B=A^C ,A=B^C 要论现代科学,还是要起源于英国
解释看懂了,例子没看懂。 0101 1000 XOR0000 1001= 01111000这个怎么异或来的??谢谢楼主。 zhhayu 发表于 2018-3-24 15:08
0101 1000 XOR0000 1001= 01111000这个怎么异或来的??谢谢楼主。
思维没错,是我的Ascll码给错了。空格的00100000 X的01011000密钥 01111000 看看学习,谢谢分享 谢谢分享 嗯,楼主你的前面介绍部分的二进制转十进制1010(b)=12(d)应该是 10吧?