Crypto-简单加密

  1. 前言
  2. 围在栅栏中的爱
    1. 电脑键盘加密
  3. 小心猪圈
    1. Base64、Base32、Base16
    2. 猪圈密码
  4. 混合编码
    1. Unicode
  5. 疑惑的汉字
    1. 当铺密码
  6. 感悟

前言

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

围在栅栏中的爱

在这里插入图片描述
首先看到密文,这是摩斯电码
在这里插入图片描述
可以直接在线摩斯电码解密:
在这里插入图片描述
得到英文字母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()

在这里插入图片描述
密文为: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()

在这里插入图片描述

混合编码

在这里插入图片描述
下载题目,并打开
在这里插入图片描述
发现是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。。。。


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

×

喜欢就点赞,疼爱就打赏