先考虑最简单的情况,假设相同的明文(原始数据)加密出来的密文是相同的。
对照三组数据,可见明文的前八个字节是一样的,相应的,密文的前九个字节是一样的,所以假设明文前八个字节对应密文的前九个字节,然后将明文第九字节的后续字节与密文第十字节的后续字节对齐。
1.
原始数据(16进制):30 D1 35 30 02 00 0A 7C 01 E6
加密之后(16进制):7E 9D 7A 09 39 34 2B 47 20 C6
2.
原始数据(16进制):30 D7 35 30 04 00 0A 87 01 E8
加密之后(16进制):7E 9B 7A 09 3F 34 2B BC 20 C8
3.
原始数据(16进制):34 D0 35 30 04 00 0A 70 01 E2
加密之后(16进制):7A 9C 7A 09 3F 34 2B 4B 20 C2
继续对照三组数据,可见:
1. 明文(35 30 xx 00)的变化不影响后续的密文(7A 09 xx 34),因此应该是按字节加密
2. 相同明文(0x30)在不同位置得出的密文不同,因此应该不是一一对应的查表替代法
既然是按字节加密又不是查表法,所以明文和密文之间应该是通过一个公式计算出来的,所以简单的尝试一下 xor --- 明文 xor 密文
1.
原始数据(16进制):30 D1 35 30 02 00 0A 7C 01 E6
加密之后(16进制):7E 9D 7A 09 39 34 2B 47 20 C6
4E 4C 4F 39 3B 34 21 3B 21 20
2.
原始数据(16进制):30 D7 35 30 04 00 0A 87 01 E8
加密之后(16进制):7E 9B 7A 09 3F 34 2B BC 20 C8
4E 4C 4F 39 3B 34 21 3B 21 20
3.
原始数据(16进制):34 D0 35 30 04 00 0A 70 01 E2
加密之后(16进制):7A 9C 7A 09 3F 34 2B 4B 20 C2
4E 4C 4F 39 3B 34 21 3B 21 20
三组数据得到的结果一致,证明加密算法就是简单的按字节 xor,但密钥不是固定值而是一个序列。
回过头来看前八位。八字节明文得到九字节密文,所以多出的字节应该在这九个字节里。
继续按简单思路来看,做为加密算法,除非有专门的处理函数,否则没理由在密文中插入一个不相关的数据,所以假设第一个字节就是多出来的,所以,对齐,xor,就得到最终结果
1.
原始数据(16进制): 78 DA 33 32 30 32 D4 35 30 D1 35 30 02 00 0A 7C 01 E6
加密之后(16进制):4E 3B DE 71 01 76 20 C6 67 7E 9D 7A 09 39 34 2B 47 20 C6
xor 43 04 42 33 46 12 12 52 4E 4C 4F 39 3B 34 21 3B 21 20
2.
原始数据(16进制): 78 DA 33 32 30 32 D4 35 30 D7 35 30 04 00 0A 87 01 E8
加密之后(16进制):4E 3B DE 71 01 76 20 C6 67 7E 9B 7A 09 3F 34 2B BC 20 C8
xor 43 04 42 33 46 12 12 52 4E 4C 4F 39 3B 34 21 3B 21 20
3.
原始数据(16进制): 78 DA 33 32 30 32 D4 35 34 D0 35 30 04 00 0A 70 01 E2
加密之后(16进制):4E 3B DE 71 01 76 20 C6 67 7A 9C 7A 09 3F 34 2B 4B 20 C2
xor 43 04 42 33 46 12 12 52 4E 4C 4F 39 3B 34 21 3B 21 20
具体是不是,还得看更多的数据是否支持这个结论了。