【#$hX y wciv0 ou!cosi 】
最近逆向学习过程中遇到了需要还原的加密算法
算法加密代码
加密算法a 是 简单的直接异或,还原比较简单,只需要拿密文反向再异或一次就可以了。
还原加密算法a
加密算法b 也是异或,但key不是固定值了,而是移位后的自身,还原过程相对复杂一点。
推导还原过程:
以移位 2 为例
思路:已知右移2位后,Key高位必然填充00,则密文高2位和 Key 高2位进行异或,就可以还原出明文的 高2位。而明文的高2位右移后,就可得到 Key 的 高第 3 位和 第 4 位,再用密文的高 3、4 位同Key 高 3、4异或,即可还原出明文的高 3 、4 位……循环此过程,即可还原出最终明文。
右移2位异或加密还原过程
还原加密算法b
运行结果:
运行结果
补充:
b加密过程中,移位的位数和字符的位置有关 ( i%8 ),在索引等于(0,8,16,24.....)等位置的时候,移位位数会等于0,也就是这时候,明文和key相等,两个一样的数异或,结果必为0。同理,相对于还原过程,满足这个位置的明文,也是还原不出来的。
所以可以在明文特殊位置添加无关符号,保证密文还原后主要信息的完整性。例如:
【#$hX y wciv0 ou!cosi 】