8842101220480224404014224202480122
这里给出了一串数字,并且得知最终为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
搜集相关栅栏密码资料:
移位加密方法,将文本分成多个组,每组取第一个字连起来,得到密文,最后连成整段密文。
使用在线的加解密:
在线栅栏解密
尝试多次后,发现不论使用你多少字数,均不可。
继续搜集资料:
w型栅栏密码
尝试网页版解决w型密码:
栅栏密码加密/解密【W型】
得到明文
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d
有p、q、e等大素数,因此不能直接使用网络现成的RSA算法,需要自己输入参数,得到密钥。
RSA介绍
RSA密钥对生成
因此,已经p、q和e,需要得到私钥d。
RSA Tool 2 by tE
附上工具下载地址,输入参数,即可。
该图来自ZHack.Hugo
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,直接加上括号提交即可
一种食物,原来是培根啊!!!
摩斯密码很熟悉,直接用网页:
摩斯密码解密
思考,后面这一堆aaabbbbbabbabb????到底什么呢?
培根密码
两种解决方式:
1.利用bugku的网页培根解密
2.自己写代码,如培根密码(Bacon)——python解密
得到:attackanddefenceworldisinteresting
这里介绍了为什么要有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'
其中几个知识点:
#! /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
pem文件:
OpenSSL 使用 PEM 文件格式存储证书和密钥。PEM 实质上是 Base64 编码的二进制内容,再加上开始和结束行,如证书文件的
-----BEGIN CERTIFICATE----- 和
-----END CERTIFICATE----- 在这些标记外面可以有额外的信息,如编码内容的文字表示。文件是 ASCII 的,可以用任何文本编辑程序打开它们
作者:Hf1dw
链接:https://www.jianshu.com/p/c43776370840
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
可用在线网页:
公私钥解析
得到模数N(16进制),以及指数e。
16进制转为10进制
因此,得到:
p=275127860351348928173285174381581152299
q=319576316814478949870590164193048041239
e=65537
用rsatool生成私钥文件: private.pem
python rsatool.py -o private.pem -e 65537 -p XXX -q XXX
用private.pem解密flag.enc
openssl rsautl -decrypt -in flag.enc -inkey private.pem
得到:PCTF{256b_i5_m3dium}