CTF-Crypto 出题思路与解题思路

本文详细介绍了CTF-Crypto领域的出题思路,涵盖区块链、公钥RSA、流密码和各种古典密码学技术。同时讨论了加密算法的核心特性,如机密性、完整性、可用性等。文章还列举了多种编码基础,如HEX、Base64,并探讨了凯撒密码、摩斯密码等古典加密方法。此外,深入讲解了现代密码学的哈希函数、公钥密码系统如RSA,以及Diffie-Hellman密钥交换等。文章提供了解题思路,包括模数分解、离散对数问题和椭圆曲线密码学等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CTF-Crypto


出题思路:区块链、公钥RSA、流密码、分组密码

机密性(加密算法)、完整性(消息摘要)、可用性、认证性(认证签名)、不可否认性、

  1. 编码基础|HEX:a-f 0-9,考虑ascii解码

  2. 编码基础|Base64:A-W a-w 0-9 + / 共64个字符使用4字符表达3字节,不足用0替换,也即是=

    import base64
    str = "解密字符串" //将数字用!@#等替换
    basestr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
    
    newstr = ''
    table = ')!@#$%^&*('
    for i in str:
    	if i not in table:
    		newstr=newstr + i
    	else 
    		newstr=newstr+(table.index(i))
    
    import base64
    print(base.b64decode(newstr))
    
  3. 编码基础|古典密码学:单表代换加密–爆破和词频分析

    1. 凯撒密码:向前或后移动若干位。特定凯撒密码名–偏移量10 Avocat、偏移量13 ROT13、偏移量-5 Cassis、偏移量-6 Cassette
    2. 摩斯密码:点线
    3. 键盘密码:用手机九宫格或键盘位置加密
    4. 猪圈密码:以格子为基础的替换密码
    5. 培根密码:使用两种不同字体代表AB结合加密表加密
    6. 栅栏密码:要加密明文分成N个一组,然后每组第一个字相连
    7. 曲路密码:明文划分为矩阵
    8. 维吉尼亚密码:使用多表替换,同凯撒,利用重合性字频分析爆破
    9. Polybius、BrainFuck、与佛论禅、社会主义核心价值观编码、Ook!、云影密码(01246)、JsFuck(()[]!+)、圣堂武士密码、夏多密码(曲折加密)、跳舞的小人密码、
  4. 编码基础|仿射密码:一小串字母数字,有2个以上重复字母

    加密函数:E(x) = (ax + b) (mod m),其中 a与b互质,m是编码系统中字母的个数(通常都是26)。

    解密函数:D(x) = a^-1(x-b)(mod m),a的逆元可以用pow(a,-1,m)求出,

  5. 异或加密|OTP一次性密码本:key长度大于message,一次性key

  6. 现代密码|哈希函数:散列算法,单向性、固定长度、雪崩效应—MD5 16字节

    flag = 'd0g3{' + hashlib.md5(SECRET).hexdigest() + '}'
    broken_flag = 'd0g3{71b2b5616**2a4639**7d979**de964c}'
    assert flag[:14] == broken_flag[:14]
    assert flag[16:22] == broken_flag[16:22]
    assert flag[24:29] == broken_flag[24:29]
    ciphier = hashlib.sha256(flag).hexdigest()
    print(ciphier)
    '''ciphier = '0596d989a2938e16bcc5d6f89ce709ad9f64d36316ab80408cb6b89b3d7f064a'''
    
    //多线程爆破hash#!/usr/bin/python
    from pwn import pwnlib
    from pwnlib.util.iters import mbruteforce 
    import hashlib
    
    # flag = 'd0g3{71b2b5616**2a4639**7d979**de964c}'
    msgbroken = 'd0g3{71b2b5616**2a4639**7d979**de964c}'
    table = '0123456789abcdef'
    assert len(table) ==16
    
    m1 = 'd0g3{71b2b5616' 
    m2='2a4639' 
    m3='7d979' 
    m4='de964c}'
    
    def f(res):
    	ciphier = '0596d989a2938e16bcc5d6f89ce709ad9f64d36316ab80408cb6b89b3d7f064a'
    	msgbroken = m1+res[0:2]+m2+res[2:4]+m3+res[4:6]+m4
    	tmp = hashlib.sha256(msgbroken.encode("utf-8")).hexdigest()
    	if tmp ==ciphier:
    		return True
    
    if __name__ == "__main__":
        res = mbruteforce(f,table,6,method='fixed')
        print(m1+res[0:2]+m2+res[2:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值