CTF.cryptopals加密集合1

2024-03-21 11:20
文章标签 加密 ctf 集合 cryptopals

本文主要是介绍CTF.cryptopals加密集合1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.base64,base32 ,base16编码

​编辑

1.1.base64编码

 1.2 base32:

1.3 base16:

​编辑

小结:

1.4、补充常见的密码

1.4.1古典密码学


1.base64,base32 ,base16编码

1.1.base64编码

base64索引表

Base64是用于传输8Bit字节码的编码方式之一,每6个比特 作为一个单元,对应某个可打印字符,包括字母A-Z、a-z、数字0 - 9,这样共有62个字符,剩余二个在不同系统上而不同。每三个字节有24个比特,对应4个base64单元,即3个字节表示4个可打印字符。

例如:编码'Man'

 如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行base64的编码。在编码后的base64文本后加上一个或两个“=”号,代表补足的字节数。也就是说,当最后剩余一个八位字节(一个byte)时,最后6位的base64字节块有四位是0值,最后附加上两个等号;如果最后剩余两个八位字节(2byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号

例如

 1.2 base32:

base32索引表

1.3 base16:

base16索引表

练习题一:

https://cryptopals.com/sets/1/challenges/1

import base64
s='49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d'
flag = base64.b16decode(s)
print(flag)

小结:

1、base16编码其实就把字符转成ascii码的16进制。
2、b64encode和b16encode只能对bytes类型的数据进行编码,但解码时可以对bytes类型和string类型的数据都可以解码。

1.4、补充常见的密码

1.4.1古典密码学

古典密码的加密是将明文的每一个字母代换为字母表中的另一个字母。

1.4.1.1凯撒密码

凯撒密码加密时将明文中的每个字母按字母表顺序向前或向后移动固定数目作为密文

题目

加密一次,再来一次,然后回到起点。1Ebbg8Vf7Abg3Nyybjrg

思路:2次,为Rot13

1.4.1.2 移位密码

移位密码可以任意移动,后期不仅处理26个字母,还会处理数字和特殊字符。参照ASCII表进行位移。

1.4.1.3 仿射密码

原理
仿射密码的加密函数是E(x)=(ax+b)(mod m),其中

  • x表示明文按照某种编码得到的数字
  • a和m互质
  • m是编码系统中字母的数目

解密函数是D(x)=a-1(x-b)(modm),其中a-1是a在Zm群的乘法逆元。
乘法逆元:
a* a -1(mod m)=1 

例如:

加密

 解密

 

具体python代码可参考:

仿射密码的加密与解密_带问号的小朋友的博客-CSDN博客_仿射密码加密

题目

使用仿射函数y=3x+9加密得到的密文为JYYHWVPIDCOZ,请尝试对其解密。flag为flag{大写明文}。

思路:

y=3x+9——>3x + 9 = y(mod 26)——>x = 3^-1(y-9)mod 26(3的乘法逆元是9)->x=9(y-9)mod 26

注意是三等号

1.4.1.4多表代换密码

  • 该算法基于5*5的字母矩阵,该矩阵使用一个关键词构造(即密钥)
  • 从左到右、从上到下顺序,填入关键词的字母(去除重复字母)后,将字母表其作余字母填入。(I=J)
  • 将明文两个分为一组,若出现相同字母,则用X替代最后字母。在每组中,查找矩阵替换:
  1. 若两个字母同行,则用右方字母替换
  2. 若两个字母同列,则用下方字母替换
  3. 若即不同行也不同列,则用矩阵对角字母替换

1.4.1.5 棋盘密码

 

1.4.1.6 Vigenere维吉尼亚密码

使用26个字母购成字母阵横行为明文列,纵向为密钥列

 加密: C = P + K(mod26)

 解密: P = (C-K)%26

题目:

今天来和Caesar学习一-点新知识吧: Google下?听说与FLAG这个字符串有关: kwam{atgksprklzojozb}
思路:当时走了弯路,后来尝试了Vigenere

1.4.1.7 培根密码(bacon)

本质上是二进制,没有用01,而是AB

题目 

先按照五个一组重新排序

bAcon iSaME aTpro dUcTp rePar edfrO mapig andUs uALLy cUReD

在对照表可以得到flag

ilikebacon

1.4.1.8 栅栏密码(Railfence)

2栏栅栏密码:
比如明文:THEREISACIPHER
去掉空格后变为:THEREISACIPHER
两个一组,得到:THEREISACIPHER
先取出每行第一个字母:TEESCPE
再取出每行第二个字母:HRIAIHR
连在一起就是:TEESCPEHRIAIHR
而解密的时候,先把密文从中间分开,变为两行:
T E E S C P E
H R I A I H R
再按上下上下的顺序组合起来:
THEREISACIPHER
分出空格,就可以得到原文了:
THEREIS A CIPHER
主要像是矩阵,以列为顺序依次取数。

多栏栅栏密码:
明文:THEREISACIPHER
七个一组:THEREISACIPHER

抽取字母:TAHCEIRP EHIE SR

组合得到密码:TAHCEIRPEHIESR
可以通过分析密码的字母数来解出密码
比如:TAHCEIRPEHIESR
一共有14个字母,可能是2栏或者7栏
尝试2栏--》失败
尝试7栏--》成功

当字母数m为偶数时,分栏数可能是其因子
当字母数m为奇数时,可能是前m-1个均分,最后一个独自成行,当然也可能m+1均分,任意分都有可能

题目
Caesar 被困住了2333333,13 根栅栏,怎么办?h{igr},aarclietflhf-_peecirroc,eo_fhlels caifnge

1.4.1.9 摩斯密码(Morse)

用.和_表示,以前用于发电报

 可以在网上在线工具直接计算

http://www.zhongguosou.com/zonghe/moErSiCodeCon verter.aspx
或者:
http://rumkin.com/tools/cipher/morse.php

这篇关于CTF.cryptopals加密集合1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/m0_61506558/article/details/124767016
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/832521

相关文章

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密