一些题目中了解到的Crypto
侧边栏壁纸
  • 累计撰写 4 篇文章
  • 累计收到 7 条评论

一些题目中了解到的Crypto

xorb7
2022-07-31 / 3 评论 / 31 阅读 / 正在检测是否收录...

今天终于拾起这颗摆烂的心,静静地看了几道关于Crypto的题,发现自己对于这个方向的了解甚浅!但没关系,我不会轻言放弃。
首先总结如下:
在此声明,题目中所出现的题所涉及的类型我都会记录如下,持续更新...
摩斯密码
对照摩斯电码表

摩斯电码表

URL编码
URL 编码将字符转换为可通过因特网传输的格式。
URL 只能使用 ASCII 字符集 通过因特网进行发送。
由于 URL 通常包含 ASCII 集之外的字符,因此必须将 URL 转换为有效的 ASCII 格式。
URL 编码使用后跟十六进制数字的 "%" 替代不安全的 ASCII 字符。
URL 不能包含空格。URL 编码通常使用加号(+)或 %20 替代空格。
注:参考ASCII 编码参考手册

栅栏密码
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
加密原理
①把将要传递的信息中的字母交替排成上下两行。
②再将下面一行字母排在上面一行的后边,从而形成一段密码。
③例如:
明文:THE LONGEST DAY MUST HAVE AN END
加密:
1、把将要传递的信息中的字母交替排成上下两行。
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
2、 密文:
将下面一行字母排在上面一行的后边。
TEOGSDYUTAENN HLNETAMSHVAED
解密:
先将密文分为两行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的顺序组合成一句话
明文:THE LONGEST DAY MUST HAVE AN END

实现的部分源代码:

//加密部分:
// 获取密钥和明文
                String str_p = et_plaintext.getText().toString();
                char[] str_p_char = null;
                    {
                    try 
                    {
                    str_p_char = str_p.toCharArray();
                    }
                    catch (Exception e) {
                        System.out.println("Exception");
                    }
                    int len=str_p_char.length;
                    System.out.println("len:"+len);
                    StringBuffer sb_1 = new StringBuffer();
                    StringBuffer sb_2 = new StringBuffer();
                    if(len%2==1)
                    {
                    for (int i = 0; i <len;i=i+1)
                    {
                    if(i%2==0)
                    {
                        sb_1.append(str_p_char[i]);
                    }
                    else
                    {
                        sb_2.append(str_p_char[i]);
                    }
                    }
                    }
                    else
                    {
                        for (int i = 0; i <len; i=i+2)
                        {
                        sb_1.append(str_p_char[i]);
                        sb_2.append(str_p_char[i+1]);
                        }
                    }
                                         
                    str_p = sb_1.toString()+sb_2.toString();
//解密部分:
 
                                   String str_c = et_ciphertext.getText().toString();
                char []str_c_char = null;
                 
                try
                {
                    str_c_char=str_c.toCharArray();
                }
                    catch(Exception e)
                    {
                    System.out.println("Exception");
                    }
                    int len=str_c_char.length;
                    int half=len/2;
                    StringBuffer sb = new StringBuffer();
                    if(len%2==1)
                    {
                    int i=0;
                    for (i = 0; i <half;i=i+1)
                    {
                    sb.append(str_c_char[i]);
                    sb.append(str_c_char[i+half+1]);
                    }
                    sb.append(str_c_char[half]);
                    }
                    else
                    {
                    for (int i = 0; i <half; i=i+1)
                        {
                            sb.append(str_c_char[i]);
                            sb.append(str_c_char[i+half]);
                        }
                            }
                        str_c=sb.toString();

OOK密码
ook密码中有大量ook,加上一些符号;
Ook! has only three distinct syntax elements:
Ook.
Ook?
Ook!
这种就是ook密码

Brainfuck
Brainfuck是一种极小化的计算机语言
注:两种均用替换法
在线加密解密: https://www.splitbrain.org/services/ook

BASE大家族
base64,base32,base16.是最为常用的。
关于三种base区分:
1.Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,base64就是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应4个base64单元,即3个字节可表示4个可打印字符。它可用来作为电子邮件的传输编码。
在base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同系统中而不同。
2.关于base32:base32中只有大写字母(A-Z)和数字234567。
3.关于base16:base16中只有数字0-9以及大写字母ABCDEF。

猪圈密码
猪圈密码是一种以格子为基础的简单替代式密码。即使使用符号,也不会影响密码分析,亦可用在其它替代式的方法。
实现:
1.单个

单个

2.整体

整体

Polybius密码
一般是将给定的明文加密为两两组合的数字。
密码表:

棋盘密码

棋盘密码

1.对于解密,对密文每两个字符一组,分别进行解密;
2.由于密文仅包含5个字符,所以其密钥(也就是密码表)只有5!种可能;
3.写脚本暴力攻击(brute-force)即可。

5bit编码
五个比特的编码可以表示32种不同的状态。 5个比特就是5位2进制数,5位2进制数可以表示为00000、00001、00010、00011、00100、00101、00110、00111......11111,换算成十进制就是0、1、2、3、4、5、6、7......32共计32种状态。
5bit编码在线解密: https://www.boxentriq.com/code-breaking/baudot-code

1

评论 (3)

取消
  1. 头像
    zxrdfw
    Windows 10 · FireFox

    666666666666666

    回复
  2. 头像
    zxrdfw
    Windows 10 · FireFox

    alert(/xss/)

    回复
    1. 头像
      zxrdfw
      Windows 10 · FireFox
      @ zxrdfw
      111
      回复