CTF密码学部分知识总结(一)

openssl 解密RSA一般步骤

步骤:
①使用 openssl 解密.pem 中参数 --> ②参数十六进制转换为十进制 --> ③ 利用 factor 对大整数进行分解,得到 p 和 q --> ④用 rsatool 生成私钥文件: private.pem --> ⑤用 private.pem 解密 flag.enc

①使用 openssl 解密.pem 中参数。
Openssl 是 linux 自带的一个加密库,可以直接使用。

openssl rsa -pubin -text -modulus -in warmup  -in ./Normal_RSA/pubkey.pem

②参数十六进制转换为十进制 Python 支持直接将 16 进制转换为 10 进制 Linux 下进入 python 命令行 0x C2636AE5C3D8E43FFB97AB09028F1AAC6C0BF6CD3D70EBCA281BFFE97FBE30DD
在这里插入图片描述
也可使用python solve.py -g --dumpkey --key ../exercise/rsa-2/public.pem,得到的n直接是十进制的,可以省略步骤1和2
利用 factor 对大整数进行分解,得到 p 和 q :
p= 275127860351348928173285174381581152299
q= 319576316814478949870590164193048041239
④用 rsatool 生成私钥文件: private.pem

python rsatool.py -o private.pem -e 65537 -p 275127860351348928173285174381581152299 -q 319576316814478949870590164193048041239 

在这里插入图片描述
⑤用 private.pem 解密 flag.enc :

openssl rsautl -decrypt -in ./Normal_RSA/flag.enc -inkey ./private_1.pem

在这里插入图片描述
成功获取flag,这种方法比较啰嗦,作为用来弥补solve.py无法获取完整flag的情况,接下来总结常用的各种密码学解密方法:

1.凯撒密码(Caesar)

#!/usr/bin/python
# -*- coding=utf -*- 
def caesar(cipher):
    for j in range(26):
        str_list = list(cipher)
        i = 0
        while i < len(cipher):
            if not str_list[i].isalpha():
                str_list[i] = str_list[i]
            else:
                a = "A" if str_list[i].isupper() else "a"
                str_list[i] = chr((ord(str_list[i]) - ord(a) + j) % 26 + ord(a))
            i = i + 1
        print(''.join(str_list))  
if __name__ == '__main__':
    cipher = "oknqdbqmoq{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz}"
caesar(cipher)

2.摩斯密码在线解密

http://www.bejson.com/enc/morse/

# !/usr/bin/python
# -*- coding=utf -*-

table = {
   'a': ".-", 'b': "-...", 'c': "-.-.", 'd': "-..", 'e'
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值