2

Crypto-简单加密

 1 year ago
source link: http://qwzf.top/2019/07/21/Crypto-%E7%AE%80%E5%8D%95%E5%8A%A0%E5%AF%86/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

由于上次总结了位移编码,于是又补了一篇简单加密。

围在栅栏中的爱

在这里插入图片描述
在这里插入图片描述

首先看到密文,这是摩斯电码

在这里插入图片描述
在这里插入图片描述

可以直接在线摩斯电码解密:

在这里插入图片描述
在这里插入图片描述

得到英文字母KIQLWTFCQGNSOO
发现并没有什么规律,根据题目“围在栅栏中的爱”,进行栅栏解密也得不到有用信息。
看到题目描述“最近一直在好奇一个问题,QWE到底等不等于ABC?”
QWE?!很明显这是键盘密码的键盘替换密码,也就是键盘QWE加密法
了解一下相关知识:

电脑键盘加密

包围圈加密
如:
k我们可以加密为ijml
l可以加密为pkm
竖对称加密
如:
l对称a
o对称w
v对称v(中心点不加密)
e对称i
qwe v码
如:
a=qw s=we q=12 z=as
夹位法
如:
a=qz w=sx k=i p=p
凯撒移位
明文:help
密文:jrza
猪圈带入
如:
d=qwed
键盘手势
看手运动的轨迹
如:
ytfvbhn手势是a
QWE替换加密
如:
QWERT对应ABCDE
当然还有很多,可以了解一下

开始做题
因为这道题涉及了QWE替换加密,所以配一张图

在这里插入图片描述
在这里插入图片描述

可以一个一个进行对照,当然这也有个大佬的脚本

def search(x):
    return{'q':'a','w':'b','e':'c','r':'d','t':'e','y':'f','u':'g','i':'h','o':'i','p':'j','a':'k',
    's':'l','d':'m','f':'n','g':'o','h':'p','j':'q','k':'r',
    'l':'s','z':'t','x':'u','c':'v','v':'w','b':'x','n':'y','m':'z',
    }.get(x,x)
def main():
    print("QWE键盘解密程序")
    print("请输入待解密的字符串:")
    while True:
        try:
            miwen=input()
            miwen=miwen.lower()
            print("结果是:")
            for i in miwen:
                print(search(i),end='')
            print("\n")
        except:
            break

if __name__=="__main__":
    main()
python复制代码
在这里插入图片描述
在这里插入图片描述

密文为:KIQLWTFCQGNSOO
解密后:RHASBENVAOYLII
然后再根据题目标题,想到栅栏解密,结果有两种:
第1种:RABNAYIHSEVOLI
第2种:RVHAAOSYBLEINI
很显然是第一种结果的倒序,反转以后结果如下:
ILOVESHIYANBAR
试了之后发现最后结果要小写,有点坑。。。

在这里插入图片描述
在这里插入图片描述

很明显是Base64加密的,所以了解一下Base64、Base32和Base16:

Base64、Base32、Base16

范围
Base64范围:A-Z、a-z、0-9、+/
Base32范围:A-Z、2-7
Base16范围:0-9、A-F
当ASCll用Base加密达不到所对应的位数的时候用=号补齐
编码方式
ASCII 是用128(2的8次方)个字符,对二进制数据进行编码的方式
base64编码是用64(2的6次方)个字符,对二进制数据进行编码的方式
base32就是用32(2的5次方)个字符,对二进制数据进行编码的方式
base16就是用16(2的4次方)个字符,对二进制数据进行编码的方式
Base64
Base64加密方式是将三个八位的字节转化为四个六位的字节(不足八位的高位补00),38 = 46;,所以base64加密过后的内容比原来的大三分之一;
如:加密“ace”
ace转化为二进制为:‭01100001‬ ‭01100011‬ ‭01100101‬
转化为base64的四字节六位:011000 01‬‭0110 0011‬01 100101‬
那因为计算机是一字节八位的存数,所以高位补00后变为:00011000 0001‬‭0110 000011‬01 00100101‬
转化为十进制:24 22 13 37

在这里插入图片描述
在这里插入图片描述

Base32

Base32将任意字符串按照字节进行切分,并将每个字节对应的二进制值(不足8比特高位补0)串联起来,按照5比特一组进行切分,并将每组二进制值转换成十进制来对应32个可打印字符中的一个。

在这里插入图片描述
在这里插入图片描述

Base16
Base16编码使用16个ASCII可打印字符(数字0-9和字母A-F)对任意字节数据进行编码。Base16先获取输入字符串每个字节的二进制值(不足8比特在高位补0),然后将其串联进来,再按照4比特一组进行切分,将每组二进制数分别转换成十进制,在下述表格中找到对应的编码串接起来就是Base16编码。可以看到8比特数据按照4比特切分刚好是两组,所以Base16不可能用到填充符号“=”。

在这里插入图片描述
在这里插入图片描述

了解结束开始做题,首先将题目字符串进行Base64解密

在这里插入图片描述
在这里插入图片描述

发现16进制数值,然后Base16解密

在这里插入图片描述
在这里插入图片描述

发现数字最大小于7,所以Base32解密

在这里插入图片描述
在这里插入图片描述

然后又发现是Base64,所以Base64解密

在这里插入图片描述
在这里插入图片描述

发现flag那种样式了,然后根据题目“小心猪圈”,应该就是猪圈密码解密了,先了解一下猪圈密码:

猪圈密码还有一个名字叫共济会密码,属于最古老的密码之一,也是密码学里最简单易懂的密码。它是以格子为基准的简单代替式逻辑密码,无论怎么变化都可以找到逻辑替代的方法,曾经是美国内战时盟军使用的密码。

在这里插入图片描述
在这里插入图片描述

对应下图就是:HORSE

在这里插入图片描述
在这里插入图片描述

下面给了个猪圈密码的对照表

在这里插入图片描述
在这里插入图片描述

所以对密文:ocjp{zkirjwmo-ollj-nmlw-joxi-tmolnrnotvms}
进行猪圈对照,ocjp对应flag,依次对照得到flag
上边那个QWE键盘加密的脚本改写写一下就可以了

def search(x):
    return{'j':'a','k':'b','l':'c','m':'d','n':'e','o':'f','p':'g','q':'h','r':'i','w':'s','x':'t',
    'y':'u','z':'v','a':'j','b':'k','c':'l','d':'m','e':'n',
    'f':'o','g':'p','h':'q','i':'r','s':'w','t':'x','u':'y','v':'z',
    }.get(x,x)
def main():
    print("解密程序")
    print("请输入待解密的字符串:")
    while True:
        try:
            miwen=input()
            miwen=miwen.lower()
            print("结果是:")
            for i in miwen:
                print(search(i),end='')
            print("\n")
        except:
            break

if __name__=="__main__":
    main()
python复制代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下载题目,并打开

在这里插入图片描述
在这里插入图片描述

发现是Base64,Base64解密得

在这里插入图片描述
在这里插入图片描述

解密结果是Unicode?!了解一下

Unicode

Unicode编码后的大小是一样的.例如一个英文字母 “a” 和 一个汉字 “好”,编码后都是占用的空间大小是一样的,都是两个字节!Unicode可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。
UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16,UTF-32和UTF-7编码。
好了开始做题,unicode解码

在这里插入图片描述
在这里插入图片描述

然后再Base64解码

在这里插入图片描述
在这里插入图片描述

很明显结果是10进制,所以10进制转ASCII

在这里插入图片描述
在这里插入图片描述

得到flag。

疑惑的汉字

在这里插入图片描述
在这里插入图片描述

汉字有关的密码?!我想到了当铺密码,了解一下

当铺密码就是一种将中文和数字进行转化的密码,算法相当简单:当前汉字有多少笔画出头,就是转化成数字几。
所以转化一下

在这里插入图片描述
在这里插入图片描述

然后10进制转ASCII

在这里插入图片描述
在这里插入图片描述

得到flag

对密码这一块又有了掌握,做题过程中发现好多RSA的题,该总结总结了,继续努力!
小白进阶ing。。。。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [email protected]


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK