Crypto-简单加密

5 篇文章 0 订阅
1 篇文章 0 订阅

前言

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

围在栅栏中的爱

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

感悟

对密码这一块又有了掌握,继续努力
小白进阶ing。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Crypto-js是一个JavaScript加密库,用于进行各种加密和解密操作。它提供了多种加密算法,包括对称加密和非对称加密,并支持各种常见的加密模式和填充方案。 使用Crypto-js进行加密非常简单。首先,我们需要引入Crypto-js库,可以通过在网页中引入相关的JavaScript文件或者使用npm安装来实现。然后,我们可以使用其提供的各种加密算法对需要加密的数据进行加密。例如,我们可以使用AES对称加密算法对数据进行加密。以下是一个使用Crypto-js进行AES加密的示例代码: ```javascript // 引入Crypto-js库 const CryptoJS = require("crypto-js"); // 定义需要加密的数据和秘钥 const data = "Hello, World!"; const key = "1234567890abcdef"; // 进行AES加密 const encryptedData = CryptoJS.AES.encrypt(data, key).toString(); console.log(encryptedData); ``` 解密也很简单,我们只需要使用相同的密钥对加密后的数据进行解密即可。以下是一个使用Crypto-js进行AES解密的示例代码: ```javascript // 引入Crypto-js库 const CryptoJS = require("crypto-js"); // 定义密文和秘钥 const encryptedData = "U2FsdGVkX19w3MLS2+2GLWsRy0iKIxqwnwll2YBKVIQ="; const key = "1234567890abcdef"; // 进行AES解密 const decryptedData = CryptoJS.AES.decrypt(encryptedData, key).toString(CryptoJS.enc.Utf8); console.log(decryptedData); ``` 通过以上示例,我们可以看到使用Crypto-js进行加密和解密非常简单。它提供了丰富的加密算法和功能,可以满足各种加密需求,是进行数据加密解密的常用工具库之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值