关于rsa的openssl命令一些随笔。
2018-02-23 11:57
447 查看
openssl用来对一些标准格式的rsa加解密。
首先对于pubkey.pem,我们可以使用openssl命令提取信息。
openssl rsa -pubin -in (文件名) -text
ps:只要文件名合法就能提取相关信息。
而对于private.pem,我们也可以使用openssl命令。
openssl rsa -in (文件名) -text
然后我们来介绍一下openssl 的rsautl:
openssl rsautl -encrypt -in test -out test.enc -inkey asn1pub.pem -pubin
2)私钥解密
openssl rsautl -decrypt -in test.enc -out test.dec -inkey asn1enc.pem
比较test和test.dec两个文件结果相同。
openssl rsautl -sign -in test -out test.sig-inkey asn1enc.pem
2)公钥验证
openssl rsautl -verify -in test.sig -out test.vfy -inkey asn1pub.pem -pubin
随即直接写python脚本解密,
首先没什么想法,直接对pubkey.pem使用 openssl命令
openssl rsa -pubin -in pubkey.pem -text -modulus
提取出n和e,发现n太大,根本没有分解的可能。所以它只是起到一个误导作用。
随机对private.pem使用openssl命令
openssl rsa -in private.pem -text -modulus
把提取出来的私钥存在private.key里面,使用openssl命令解密。
openssl rsautl -decrypt -in flag.enc -inkey private.key -out flag.de
openssl rsautl -decrypt -in flag.enc -inkey private.key -out flag.de -oaep
openssl rsautl -decrypt -in flag.enc-inkey private.key -out flag.de -pkcs
因为不知道是哪种填充方式,把命令都试试。最后发现是oarp填充。
解密得flag。
THINKING FOR YOUR READING!
--BY 郁离歌
首先对于pubkey.pem,我们可以使用openssl命令提取信息。
openssl rsa -pubin -in (文件名) -text
ps:只要文件名合法就能提取相关信息。
而对于private.pem,我们也可以使用openssl命令。
openssl rsa -in (文件名) -text
然后我们来介绍一下openssl 的rsautl:
加解密
1)公钥加密openssl rsautl -encrypt -in test -out test.enc -inkey asn1pub.pem -pubin
2)私钥解密
openssl rsautl -decrypt -in test.enc -out test.dec -inkey asn1enc.pem
比较test和test.dec两个文件结果相同。
签名验证
1)私钥签名openssl rsautl -sign -in test -out test.sig-inkey asn1enc.pem
2)公钥验证
openssl rsautl -verify -in test.sig -out test.vfy -inkey asn1pub.pem -pubin
例题
1.JarvisOJ Medium RSA
题目同时给出了flag.enc和pubkey.pem文件时,可以先使用openssl命令提取出n和e。openssl rsa -pubin -in pubkey.pem -text -modulus然后factordb.com分解一下p和q,得到:
p = 275127860351348928173285174381581152299
q = 319576316814478949870590164193048041239
随即直接写python脚本解密,
import libnum from Crypto.Util.number import long_to_bytes p = 275127860351348928173285174381581152299 q = 319576316814478949870590164193048041239 n = 87924348264132406875276140514499937145050893665602592992418171647042491658461 e = 65537 d = libnum.invmod(e, (p - 1) * (q - 1)) with open('flag.enc', 'r') as f: c = f.read().encode('hex') c = int(c, 16) m = pow(c, d, n) print long_to_bytes(m) # 前面有一部分不知道为什么乱码,但是不影响看出flag # ���&[�PCTF{256b_i5_m3dium}
2.HGAME WEEK3 BABY RSA
题目很有迷惑性的同时给出了pubkey.pem,flag.enc和private.pem。首先没什么想法,直接对pubkey.pem使用 openssl命令
openssl rsa -pubin -in pubkey.pem -text -modulus
提取出n和e,发现n太大,根本没有分解的可能。所以它只是起到一个误导作用。
随机对private.pem使用openssl命令
openssl rsa -in private.pem -text -modulus
把提取出来的私钥存在private.key里面,使用openssl命令解密。
openssl rsautl -decrypt -in flag.enc -inkey private.key -out flag.de
openssl rsautl -decrypt -in flag.enc -inkey private.key -out flag.de -oaep
openssl rsautl -decrypt -in flag.enc-inkey private.key -out flag.de -pkcs
因为不知道是哪种填充方式,把命令都试试。最后发现是oarp填充。
解密得flag。
THINKING FOR YOUR READING!
--BY 郁离歌
相关文章推荐
- 关于openssl rsa php c++ js 协同加密解密的一些资源链接
- 关于使用SSH工具的一些命令记录
- 一些常用的OpenSSL命令
- 【Linux基础学习之二】关于Linux的一些基本命令(ls命令、cd命令、mv命令、cp命令…)
- 关于java执行命令的一些(调本地的命令 调远程主机的命令 在后台执行命令)
- 自制的日历控件,可以在日历上DIY事情,相关于记一些随笔的文字之类的话题,如“1/28 是新年啊”
- Oracle 关于索引的一些命令学习,以及约束条件
- 关于git的一些使用方法和基本命令
- ABAP--关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)
- 关于安卓智能电视的一些常用命令
- 关于startup的一些命令执行情形
- 关于ubuntu(server版)的一些命令<更新中>
- Windows系统下关于进程的一些命令
- 关于Linux的权限和一些基本命令
- 关于linux中vim常用的一些命令
- 关于linux用户管理的一些命令
- 关于cd命令的一些注意
- 关于 ftp 的一些命令