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个相同的字符):
aaaa → abcd规律很明显:每个字符的 ASCII 值加上了它的位置索引(从0开始)。
a(0) + 0 = aa(1) + 1 = ba(2) + 2 = ca(3) + 3 = d所以加密公式是:encrypted[i] = chr(ord(plaintext[i]) + i)
解密即为逆操作:plaintext[i] = chr(ord(encrypted[i]) - i)
Python 解密脚本:
encrypted = "477djk?="decrypted = ""for i, c in enumerate(encrypted): decrypted += chr(ord(c) - i)print(decrypted) # 465aff96验证:重新加密 465aff96:
4 + 0 = 46 + 1 = 75 + 2 = 7a + 3 = df + 4 = jf + 5 = k9 + 6 = ?6 + 7 = =结果:477djk?=,与已知密文完全匹配。
自定义加密算法如果有公开的加密 oracle(可以任意加密已知明文),攻击者可以通过 chosen-plaintext attack 推导出算法逻辑,进而解密任意密文。
465aff96