攻防世界-密码学-入门版

攻防世界crypto-初级

  • 幂数加密
    • 分析题目
    • 云影密码
    • 代码实现
  • 栅栏密码
    • 分析题目
  • easy_RSA
    • 分析题目
    • 了解RSA
    • 求解方法
      • 1 使用工具
      • 2 公式手动计算
    • 不仅仅是morse
  • easyChallenge
    • pyc格式
    • 反编译
  • normal_RSA
    • 解题思路
    • 解题工具

幂数加密

分析题目

8842101220480224404014224202480122
攻防世界-密码学-入门版_第1张图片
这里给出了一串数字,并且得知最终为8位大写字母,可以分析得到这种是云隐密码

云影密码

这种加密方式仅使用01248这5种数字来进行,其中0用来唯一表示间隔,其他数字用加法和表示替换密文。再使用数字1-26表示字母A-Z。
如:18 = 1+8 = 9 = I,1248 = 1+2+4+8 = 15 = O

特点:密文中仅存在01248,加密对象仅有字母

代码实现

思路:
1.分割0
2.每一小段相加
3.输出大写字母

//分割数字并转为大写字母
# -*- coding: UTF-8 -*-
word='8842101220480224404014224202480122'
list=word.split('0') //分割0
flag=''
for i in list://每一小段
	sum=0
	for j in i:
		sum+=int(j)
	flag+=chr(sum+64)//转为大写字母
print flag

结果:WELLDONE

栅栏密码

分析题目

ccehgyaefnpeoobe{lcirg}epriec_ora_g
攻防世界-密码学-入门版_第2张图片
搜集相关栅栏密码资料:
移位加密方法,将文本分成多个组,每组取第一个字连起来,得到密文,最后连成整段密文。

使用在线的加解密:
在线栅栏解密

尝试多次后,发现不论使用你多少字数,均不可。

继续搜集资料:
w型栅栏密码

尝试网页版解决w型密码:
栅栏密码加密/解密【W型】
攻防世界-密码学-入门版_第3张图片
得到明文

easy_RSA

分析题目

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d

有p、q、e等大素数,因此不能直接使用网络现成的RSA算法,需要自己输入参数,得到密钥。

了解RSA

RSA介绍

RSA密钥对生成

最终求出了D和N,也就是说我们生成了密钥对中的私钥攻防世界-密码学-入门版_第4张图片

因此,已经p、q和e,需要得到私钥d。

求解方法

1 使用工具

RSA Tool 2 by tE
攻防世界-密码学-入门版_第5张图片
附上工具下载地址,输入参数,即可。
攻防世界-密码学-入门版_第6张图片

该图来自ZHack.Hugo

2 公式手动计算

RSA的计算过程是:
任选两个大质数p和q,p!=q,计算N=pq
计算N的欧拉函数r(n)=(p-1)(q-1)
任选一个e满足 1 找到d,使e*d/r(n)=x……1(x是多少不重要,重要的是余数为1)
至此(n,e)为公钥,(n,d)为私钥
加密:C=Me(mod n);解密:M=Cd(mod n)
————————————————
版权声明:本文为CSDN博主「eGlhb2hlaQ==」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/asd413850393/article/details/89810137

补充:
根据以上公式计算:
1.N=p*q
2.r(n)
3.d=(r(n)+1)/e

得到d,直接加上括号提交即可

不仅仅是morse

一种食物,原来是培根啊!!!

摩斯密码很熟悉,直接用网页:
摩斯密码解密

攻防世界-密码学-入门版_第7张图片
思考,后面这一堆aaabbbbbabbabb????到底什么呢?

培根密码
攻防世界-密码学-入门版_第8张图片
两种解决方式:
1.利用bugku的网页培根解密
2.自己写代码,如培根密码(Bacon)——python解密

得到:attackanddefenceworldisinteresting

easyChallenge

pyc格式

这里介绍了为什么要有pyc:
pyc介绍

Python 在解释源程序时分为两步:
第一步:将源码转为字节码
第二步:将字节码转换为机器码
pyc 文件是由 Python 解释器将 模块的源码 转换为 字节码。
(pyc,py代表pychon,c 是 compiled的含义,pyc即编译过的python文件 )
当我们的程序没有修改过,那么下次运行程序的时候,就可以跳过 从源码到字节码 的过程,直接加载 pyc 文件。

那怎么读取pyc中的程序呢?
在线pyc反编译工具

#! /usr/bin/env python 2.7 (62211)
#coding=utf-8
# Compiled at: 2018-08-08 22:29:44
#Powered by BugScaner
#http://tools.bugscaner.com/
#如果觉得不错,请分享给你朋友使用吧!
import base64
 
def encode1(ans):
    s = ''
    for i in ans:
        x = ord(i) ^ 36
        x = x + 25
        s += chr(x)
 
    return s
 
 
def encode2(ans):
    s = ''
    for i in ans:
        x = ord(i) + 36
        x = x ^ 36
        s += chr(x)
 
    return s
 
 
def encode3(ans):
    return base64.b32encode(ans)
 
 
flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:
    print 'correct'
else:
    print 'wrong'

反编译

其中几个知识点:

  1. base32decode输出的是int
  2. ^按位异或,运算符跟 | 类似,但有一点不同的是 如果两个操作位都为1的话,结果产生0(相关文章:位运算符)
  3. ord()函数主要用来返回对应字符的ascii码,chr()主要用来表示ascii码对应的字符他的输入时数字,可以用十进制,也可以用十六进制。(相关文章:ord和chr)
#! /usr/bin/env python 2.7 (62211)
#coding=utf-8
import base64

def decode1(ans):
	s=''
	for i in ans:
		x=ord(i)-25
		x=x^36
		s+=chr(x)
	return s

def decode2(ans):
	s=''
	for i in ans:
		x=i   //注意!!这里是i,因为decode后直接就是int型了
		x=(x^36)-36
		s+=chr(x)
	return s

def decode3(ans):
	return base64.b32decode(ans) 


final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
f1=decode3(final)
print f1
f2=decode2(f1)
print f2
flag=decode1(f2)
print flag

得到flag:interestinghhhhh

normal_RSA

解题思路

  1. 分析fem文件格式
  2. 获取公钥中的参数信息
  3. 计算私钥pem文件
  4. 解开flag.enc文件获取txt

解题工具

pem文件:

OpenSSL 使用 PEM 文件格式存储证书和密钥。PEM 实质上是 Base64 编码的二进制内容,再加上开始和结束行,如证书文件的
-----BEGIN CERTIFICATE----- 和
-----END CERTIFICATE----- 在这些标记外面可以有额外的信息,如编码内容的文字表示。文件是 ASCII 的,可以用任何文本编辑程序打开它们
作者:Hf1dw
链接:https://www.jianshu.com/p/c43776370840
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

可用在线网页:
公私钥解析
攻防世界-密码学-入门版_第9张图片
得到模数N(16进制),以及指数e。
16进制转为10进制

攻防世界-密码学-入门版_第10张图片
从N=p*q,进行大素数分解。
在线大素数分解

攻防世界-密码学-入门版_第11张图片
因此,得到:
p=275127860351348928173285174381581152299
q=319576316814478949870590164193048041239
e=65537

用rsatool生成私钥文件: private.pem

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

攻防世界-密码学-入门版_第12张图片

用private.pem解密flag.enc

openssl rsautl -decrypt -in flag.enc -inkey private.pem

在这里插入图片描述

得到:PCTF{256b_i5_m3dium}

你可能感兴趣的:(CTF)