程序笔记   发布时间:2022-07-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了[长安“战疫”网络安全卫士守护赛]no_cry_no_can大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

[CRYPTO] no_cry_no_can

cazy{y3_1s_a_h4nds0me_b0y!}

得到py文件

from Crypto.Util.number import*
from secret import flag,key

assert len(key) <= 5 #断言:加密的密钥长度不大于5
assert flag[:5] == b'cazy{' #断言:明文flag的前缀
def can_encrypt(flag,key):
    block_len = len(flag) // len(key) + 1  # '//'运算符的意思是地板除,也就是除法向下取整。
    new_key = key * block_len	#这样做的目的是使加密能够对所有字符都有效
    return bytes([i^j for i,j in zip(flag,new_key)])  #异或加密,这里的zip其实就是取两个字符进行异或

c = can_encrypt(flag,key)
print(c)

# b'<pHx86x1a&"mxcex12x00pmx97U1uAxcfx0c:NPxcfx18~l'

如上,我已经把整个程序的逻辑标注清楚了。下一步我们把给出的密文进行一个爆破,得到部分密钥,再利用密钥进行解密即可

head = b'cazy{'
cipherbox = [60, 112, 72, 134, 26, 38, 34, 109, 206, 18, 0, 112, 109, 151, 85, 49, 117, 65, 207, 12, 58, 78, 80, 207, 24, 126, 108]
password = []

for i in range(0,5) :#爆破取得密钥
    for j in range(0,256):
        if(head[i] ^ j == cipherbox[i]):
            password.append(j)
for i in range(0,len(cipherbox)):#依赖密钥获取明文
    print(chr(cipherbox[i]^ password[i%5]),end="")

大佬总结

以上是大佬教程为你收集整理的[长安“战疫”网络安全卫士守护赛]no_cry_no_can全部内容,希望文章能够帮你解决[长安“战疫”网络安全卫士守护赛]no_cry_no_can所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: