HackThisSite - Basic Mission 6
Challenge
Network Security Sam has encrypted his password. The encryption system is publically available and can be accessed with this form.
Sam 把他的密码加密了。加密系统是公开的,可以通过页面上的表单访问。
已知加密后的密码:477djk?=
页面提供了一个加密工具,可以输入任意字符串查看加密结果。
Solution
这题需要逆向加密算法。先用加密工具测试几组已知明文,观察规律:
输入 aaaa(4个相同的字符):
1 | aaaa → abcd |
规律很明显:每个字符的 ASCII 值加上了它的位置索引(从0开始)。
1 | a(0) + 0 = a |
所以加密公式是:encrypted[i] = chr(ord(plaintext[i]) + i)
解密即为逆操作:plaintext[i] = chr(ord(encrypted[i]) - i)
Python 解密脚本:
1 | encrypted = "477djk?=" |
验证:重新加密 465aff96:
1 | 4 + 0 = 4 |
结果:477djk?=,与已知密文完全匹配。
自定义加密算法如果有公开的加密 oracle(可以任意加密已知明文),攻击者可以通过 chosen-plaintext attack 推导出算法逻辑,进而解密任意密文。
465aff96