明文 | 密文 |
0000000 | 58E105C78856290B |
1111111 | 152D8639F768F7CE |
1111112 | 15DBBA5ED9085A0F |
111111 | BC2107A18CA29D91 |
11111111
| F5BA0BD72243F02A6B6DA71AA6ACE7F7
|
22222222 | A9BA6E2E5CAA386BCE66FDE34DD0C5CD
|
111111111111 | F5BA0BD72243F02AB5A29C3BE102CF3C |
1111111111111 | F5BA0BD72243F02AD921AA76E8DC23C5 |
11111111111111 | F5BA0BD72243F02A3198863A208F1D8A |
111111111111111 | F5BA0BD72243F02AE133BDD49B682F21 |
1111111111111111 | F5BA0BD72243F02A09457372E3B2E978EF12C5B72A9EDE6A |
初步推断加密过程:
1、第一段7位字符 转 二进制(56位) 然后每个字符间加1位变成64位 经过某种变化运算 再转成16进制
2、不满7位字符的补全7位
3、第二段七位字符运算方式和第一段不一样
4、按照15位明文加密后的密文来看,我推断的第一条可能有误
5、根据16位明文加密后的密文来看,第二段可能是8位
以7个1为例
15 | 2D | 86 | 39 | F7 | 68 | F7 | CE |
00010101 | 00101101 | 010000110 | 00111001 | 11110111 | 01101000 | 011110111 | 11001110
|
大体思路应该没错,看了两三天没看出眉目,求助攻
稍微总结一下:
1、确定是可逆的加密算法,不是hash算法
可逆的加密算法,长度肯定是随明文的长短变化的
hash 一般不会随明文的长短变化
2、通过不同的明文长度,观察对应的密文长度,找出变化的临界点
通过上面采集的样本, 就可以发现,我基本是逐位增加明文数量来观察密文长短变化的
3、通过对应的密文选取可能的加密算法
这个需要一些经验,比如 yemoon
说的话,虽然短短一句,但是没有经验是无法具备这直觉的(题主欠缺啊...)
4、利用选取的加密算法,对先前样本中的明文进行加密,得到的密文与原有的密文进行综合比对
既然有了有限的备全算法,就开始生成数据,可以验证想法了
附:padding 的一些知识
常见的四种填充方式:
1) Zeros填充:全部填充为0的字节,结果如下:
F1 F2 F3 F4 F5 F6 F7 F8//第一块
F9 00 00 00 00 00 00 00 //第二块
2) X923 填充: 填充为0的字节序列,最后一个字节记录填充的总字节数,结果如下:
F1 F2 F3 F4 F5 F6 F7 F8 //第一块
F9 00 00 00 00 00 00 07 //第二块
2) PKCS7 填充: 每个填充的字节都记录了填充的总字节数,结果如下:
F1 F2 F3 F4 F5 F6 F7 F8 //第一块
F9 07 07 07 07 07 07 07 //第二块
3) ISO10126 填充: 填充随机字节序列,最后一个字节记录填充的总字节数,结果如下:
F1 F2 F3 F4 F5 F6 F7 F8 //第一块
F9 7D 2A 75 EF F8 EF 07 //第二块
参 http://laokaddk.blog.51cto.com/368606/461279/
PKCS#5以及PKCS#7的资料
参 http://blog.csdn.net/test1280/article/details/75268255
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课