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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832521

相关文章

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

3.比 HTTP 更安全的 HTTPS(工作原理理解、非对称加密理解、证书理解)

所谓的协议 协议只是一种规则,你不按规则来就无法和目标方进行你的工作 协议说白了只是人定的规则,任何人都可以定协议 我们不需要太了解细节,这些制定和完善协议的人去做的,我们只需要知道协议的一个大概 HTTPS 协议 1、概述 HTTPS(Hypertext Transfer Protocol Secure)是一种安全的超文本传输协议,主要用于在客户端和服务器之间安全地传输数据

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

ja-netfilter的前世今生和非对称加密的欺骗原理

文章目录 ja-netfilter起源官网插件插件配置文件插件的综合应用更多用法 非对称加密欺骗原理非对称加密和数字证书激活过程和欺骗手段分析代码示例第一步:生成自签名证书脚本第二步:使用自签名证书对产品激活信息进行签名 样例数据样例激活码(注:用于代码演示,直接粘贴到JetBrains 家 IDE 中无法完成激活!不用试,肯定提示无效,无法激活!!)样例power.conf(配合ja-ne

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路