最近一个月要跟加密算法难舍难分,CTF的题只能当小消遣了
第一步:了解一个基本加密解密算法&详细破解过程
异或加密(对称算法)
加密解密过程:
明文用一个关键字做异或运算以产生密文。因为明文异或两次就会得出原来的值,所以加密和解密都严格采用同一个程序。
破解过程:
找出密钥长度。用密文XOR相对自身的各种字节的位移,统计相等的字节。如果位移是密钥长度的倍数,那么超过6%的字节将是 相等的,如果不是,则至多只有0.4%的字节是相等的(这里假设用一随机密钥来加密标准ASCII文本) 。指出密钥长度倍数的最小位移即密钥的长度。
消除密钥。按此长度移动密文XOR自身,留下明文和移动了密钥长度的明文的异或。英语每个字节会有1.3位的实际信息【这个证明我还在查,自己写代码跑不出来这种结果,也希望看到的大神可以指点一下】,足够的冗余度去确定位移的解密。
总结:破解已经如此高效,如果你用异或进行加解密,那么跟直接保存明文就没有什么差别。因为一旦取得了密文,并且知道使用的是异或算法,那么剩下来的保密时间就在几 秒钟到几小时之内。同样也论证了一句话:不要自己随便去‘创造’加密算法。