CTF密码学-编码基础知识点总结

发布时间 2023-10-10 21:11:53作者: 介怀

密码学解密网站汇总-博客园(网上找的可供参考)

密码学解密网站汇总-CSDN(网上找的可供参考)

常见编码:

1.ASCII编码

表现为: 65 76 88 99 114
对应字符:A  L  X  c   r   

ASCII编码大致可以分作三部分组成:

第一部分是:ASCII非打印控制字符(参详ASCII码表中0-31);

第二部分是:ASCII打印字符,也就是CTF中常用到的转换;

第三部分是:扩展ASCII打印字符

img

ASCII 表 | 菜鸟工具(包括一部分扩展表)

2.Base编码

Base编码特点 (base 编码可以通过代码实现, 具体算法自行搜索)

  • 一般 包含 大量数字和英文字符(a-z/A-Z),及少量其他字符
  • base32 与 base64 编码后会使用 = 补足
  1. base16 (又称 HEX)

    1.  字符串(编码前): 123abcz
       base16 编码: 3132336162637A
      
    2. Base16 编码使用 16 个 ASCII 可打印字符(数字 0-9 和字母 A-F )对任意字节数据进行编码

    3. Base16 将数据(根据ASCII编码,UTF-8编码等)转成对应的二进制数,不足8比特位高位补0。然后将所有的二进制全部串起来,4个二进制位为一组,转化成对应十进制数。

    4. 根据十进制数值找到 Base16 编码表里面对应的字符。Base16 是 4 个比特位表示一个字符,所以原始是 1 个字节( 8 个比特位)刚好可以分成两组,所以 Base16 不可能用到填充符号“=”

  2. base32

    1.  字符串(编码前): 123abcz
       base32 编码后: GEZDGYLCMN5A====
      
    2. Base32 使用了 ASCII 编码中可打印的 32 个字符(大写字母 A-Z 和数字 2-7 )对任意字节数据进行编码. Base32 将串起来的二进制数据按照 5 个二进制位分为一组,由于传输数据的单位是字节(即 8 个二进制位).所以分割之前的二进制位数是 40 的倍数( 40 是 5 和 8 的最小公倍数).如果不足 40 位,则在编码后数据补充 "=",一个 "=" 相当于一个组( 5 个二进制位),编码后的数据是原先的8/5倍.

  3. base36

    1.  字符串(编码前): 123456789
       base36 编码后: 21i3v9
      
    2. Base36 只支持整数 (明文)

    3. base36 编码是使用 0~9 的数字,加上所有 26 个字母,所有的字母要不全大写,要不全小写。

    4.  # 网上拿过来的 int 转 base36 算法(应该是对的)
       def int_to_base36(i):
           """
           Converts an integer to a base36 string
           """
           char_set = '0123456789abcdefghijklmnopqrstuvwxyz'
           if i < 36:
               return char_set[i]
           b36 = ''
           while i != 0:
               i, n = divmod(i, 36)
               b36 = char_set[n] + b36
           return b36
      
  4. base58

    1.  字符串(编码前): 123abcz
       base58 编码后: 2S8xypQFhN
      
    2. 比特币的Base58字母表:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

    3. Base58可以理解为一种58进制。Base58包含了阿拉伯数字、小写英文字母,大写英文字母。但是去掉了一些容易混淆的数字和字母:0(数字0)、O(o的大写字母)、l( L的小写字母)、I(i的大写字母)

  5. base62

    1.  字符串(编码前): 123abcz
       base62 编码后: c5c9cdo5o9odsF
      
    2. Base62 编码是由10个数字、26 个大写英文字母和 26 个小写英文字母组成

  6. base64

    1.  字符串(编码前): 123abcz
       base64 编码后: MTIzYWJjeg==
      
    2. Base64 编码是使用 64 个可打印ASCII字符(A-Z、a-z、0-9、+、/)将任意字节序列数据编码成 ASCII 字符串,另有 “=” 符号用作后缀用途。

    3. Base64 将输入字符串按字节切分,取得每个字节对应的二进制值(若不足 8 比特则高位补 0),然后将这些二进制数值串联起来,再按照 6 比特一组进行切分(因为 2^6=64),最后一组若不足 6 比特则末尾补 0。将每组二进制值转换成十进制,然后在上述表格中找到对应的符号并串联起来就是Base64编码结果。

    4. 由于二进制数据是按照8比特一组进行传输,因此 Base64 按照 6 比特一组切分的二进制数据必须是24比特的倍数( 6和8的最小公倍数)。24 比特就是 3 个字节,若原字节序列数据长度不是 3 的倍数时且剩下 1 个输入数据,则在编码结果后加 2 个 = ;若剩下 2 个输入数据,则在编码结果后加 1 个 = 。

    5. 因为Base64算法是将 3 个字节原数据编码为 4 个字节新数据,所以 Base64 编码后的数据比原始数据略长,为原来的 4/3 。在电子邮件中,根据RFC822规定,每76个字符,还需要加上一个回车换行。可以估算编码后数据长度大约为原长的 135.1%。

    6. 附:图片与 base64 可以互相转换

  7. base85

    1.  字符串(编码前): 123abcz
       base85 编码后: 0etOn@Uj]
      
    2. Base85 包含下列字符(ascii 0x24-0x7E, 即 36-126 这里有 91 个,不包含 &,',<,=,>,\这 6 个):

      $%()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
      
    3. Base85 是一种类似于 Base64 的二进制文本编码形式,通过使用五个 ASCII 字符来表示四个字节的二进制数据。

    4. base85 也称为 Ascii85,是 Paul E. Rutter 为 btoa 实用程序开发的一种二进制文本编码形式。通过使用五个 ASCII 字符来表示四个字节的二进制数据(使编码量比原来大 1/4 ,假设每 ASCII 字符 8 个比特),它比 UUENCODE 或 Base64 更有效,Base64 使用四个字符来表示三个字节的数据(1 / 3的增加,假设每ASCII字符8个比特)。

    5. 与Base64一样,Base85编码的目标是对二进制数据可打印的ASCII字符进行编码。但是它使用了更大的字符集,因此效率更高一些。

    6. 用途是Adobe的PostScript和Portable Document Format文件格式,以及Git使用的二进制文件的补丁编码。

  8. base91

    1.  字符串(编码前): 123abcz
       base91 编码后: QzAbR*o6H
      
    2. 从 94 个可打印ASCII字符(0x21-0x7E)中,以下三个字符被省略以构建base91字母: - (破折号,0x2D),\ (反斜杠,0x5C),' (撇号,0x27)

  9. base92

    1.  字符串(编码前): 123abcz
       base92 编码后: 3=:hPz3NJ
      
    2. 比base91 多一个字符

  10. base100

    1.  字符串(编码前):  123abcz
       base100 编码后: ???????
      
    2. Base100编码/解码(又名:Emoji表情符号编码/解码),可将文本内容编码为Emoji表情符号;同时也可以将编码后的Emoji表情符号内容解码为文本。

  11. base换表

    1. 更换编码表
    2. 通过新的编码表进行编码
  12. 一些base详细介绍?

3.shellcode编码

  1.  源文本:123abcz
     编码后:\x31\x32\x33\x61\x62\x63\x7a
    

4.Quoted-printable编码

  1.  源文本: 123abcz中文
     编码后: 123abcz=E4=B8=AD=E6=96=87
    
  2. 它是多用途互联网邮件扩展(MIME) 一种实现方式。有时候我们可以邮件头里面能够看到这样的编码。

5.XXencode编码

  1.  源文本: 123abcz中文
     编码后: BAH6nMK7XSiGsfSOKVk++
    
  2. XXencode 将输入文本以每三个字节为单位进行编码。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有 24个Bit,以 6 bit为单位分为 4 个组,每个组以十进制来表示所出现的数值只会落在 0到 63 之间。以所对应值的位置字符代替。它所选择的可打印字符是:

  3. +-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64个字符。跟 base64 打印字符相比,就是UUencode多一个“-” 字符,少一个”/” 字符。

6.UUencode编码

  1.  源文本: 123abcz中文
     编码后: -,3(S86)C>N2XK>:6AP
    

2. UUencode 是一种二进制到文字的编码,最早在 unix 邮件系统中使用,全称:Unix-to-Unix encoding,UUencode 将输入文本以每三个字节为单位进行编码,如果最后剩下的资料少于三个字节,不够的部份用零补齐。三个字节共有 24 个Bit,以 6-bit 为单位分为 4 个组,每个组以十进制来表示所出现的字节的数值。这个数值只会落在 0 到 63 之间。然后将每个数加上 32 ,所产生的结果刚好落在 ASCII 字符集中可打印字符(32-空白…95-底线)的范围之中。

3. 跟Base64具有非常多的类似,也做了一些特殊转码说明!因为对所有文本都会编码一次可读性不是很好, 具体编码原理、算法可以查考UUencode编码算法

4. [Uuencode编码(加密|解密)](https://www.qqxiuzi.cn/bianma/uuencode.php)

   

  



### 7.URL编码

1. ```
  源文本: 123abcz中文
  编码后: %31%32%33%61%62%63%7a%e4%b8%ad%e6%96%87
  1. url 编码又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过 %xx 编码处理。 现在已经成为一种规范了,基本所有程序语言都有这种编码,如js:有 encodeURI、encodeURIComponent,PHP 有 urlencode、urldecode 等。

  2. 编码方法很简单,在该字节 ascii 码的的 16 进制字符前面加 %. 如 空格字符,ascii码是 32,对应16进制是 '20',那么 urlencode 编码结果是: %20 。

8.Unicode编码

  1.  Unicode编码有以下四种编码方式: 
     源文本:123abcz中文
     
     &#x    [Hex]: &#x0031;&#x0032;&#x0033;&#x0061;&#x0062;&#x0063;&#x007a;&#x4e2d;&#x6587
     &# [Decimal]: &#49;&#50;&#51;&#97;&#98;&#99;&#122;&#20013;&#25991
     \U     [Hex]: \u0031\u0032\u0033\u0061\u0062\u0063\u007a\u4e2d\u6587
     \U+    [Hex]: \u+0031\u+0032\u+0033\u+0061\u+0062\u+0063\u+007a\u+4e2d\u+6587
    
  2. unicode:统一的字符编号,仅仅提供字符与编号间的映射。由于历史遗留及口语化原因,说起unicode,也常指UTF-16。

9.Escape/Unescape编码

  1.  源文本: 123abcz中文
     编码后: %u0031%u0032%u0033%u0061%u0062%u0063%u4e2d%u6587
    
  2. Escape/Unescape 加密解码/编码解码,又叫 %u 编码,采用 UTF-16BE 模式, Escape 编码/加密,就是字符对应 UTF-16 16进制表示方式前面加 %u。Unescape解码/解密,就是去掉 "%u" 后,将16进制字符还原后,由 utf-16 转码到自己目标字符。如:字符 “中”,UTF-16BE是:“4e2d”,因此Escape是“%u4e2d”。

  3. escape 对字符串进行编码,作用是让它们在所有电脑上可读。编码之后的效果是 %XX 或者 %uXXXX 这种形式。其中 ASCII字母、数字、@*/+ ,这几个字符不会被编码,其余的都会。(也可以所有的都被编码)

10.HTML实体编码

  1.  源文本: 123abcz中文
     编码后: 123abcz&#20013;&#25991;
     或   : 123abcz&#x4E2D;&#x6587;
    
  2. url编码是基于 unicode/GBK 等编码的一种编码方式,以解决特殊字符传输和中文传输问题。

  3. img

  4. 完整编码手册参考

11. utf-8编码

  1.  源文本: 123abcz中文
     编码后: 123abcz&#x4E2D;&#x6587;
    
  2. UTF-8 编码,是 Unicode 的一种可变长度字符编码,是 Unicode 的一种实现方式,又称万国码;UTF8 使用1~4字节为每个字符编码,相对于 Unicode 固定的四字节长度,更节省存储空间。

12. hash算法&加盐hash算法

  1.  源文本      : 123abcz中文
     
     SHA256 (64): 7d395b05387a18ca3b52c6007197a7d822345f4b2d38a6e68f809a6fec7dbfa7
     SHA512 (128): ae4024c9a287b0015c4b0c3f06f8af191f1dc508dd4021c32e577fd9d66e2bf4ddc51c4da9ec871980b5465a57abb9549f377cee6dd55bc46a99a874c8126bac
    
  2. Hash,一般翻译做散列或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

  3. 就是这种运算是不可逆的,只可以通过hash运算得到一个hash值,而不能通过hash值得到原始数据。并且经过hash运算后得到的hash值为固定长度。

  4. 加盐 hash:网站后台一般只储存用户密码的 hash 值,但也存在一定风险,因为如果黑客拿到了密码的 hash 后,可以的通过对比已经存在的明文与哈希的对应数据,进行对比,获得明文密码。因此,有了加盐 hash ,就是随机的在用户密码后加上一段字符后再进行hash 运算,由于黑客不知道加的盐是什么,依然无法得到密码。

13.MD5算法

  • 什么是 MD5?

    • MD5是hash算法中一种特殊的算法而已,也是hash算法,最后的结果为128个字符,但一般取其中的64或者32位。

    • MD5(或 Message Digest 5)是一种加密函数,允许您从最多 2^64 位的任何输入创建 128 位(32 个十六进制字符,因为您只需要 4 位来编码十六进制)“散列”。这会生成文件或文本的数字指纹,从而允许对其进行签名以进行安全验证。MD5 于 1991 年创建,作为MD4 算法的替代品,但它也是一种 128 位算法,存在安全漏洞(很早就发现了冲突)。1996 年,在被认为不安全的 MD5 上也发现了实际碰撞,2004 年确认了碰撞。您可以在此处(需要挂梯子)或[此处](MD5碰撞原理简单介绍及其实现 - wysng - 博客园 (cnblogs.com))找到有关碰撞的更多信息。

    • 尽管不安全,MD5 仍然被广泛用作文件指纹(例如SHA-1) 和不了解安全性的网站管理员存储密码。

    • MD5 生成的散列应该是唯一的(它不可能是 128 位,即使非常大也是有限的),因此例如,如果键入 “Password” 一词,它将生成此散列:

    •   当键入: Password  => 密码: dc647eb65e6711e155375218212b3964
        而键入: password  => 密码: 5f4dcc3b5aa765d61d8327deb882cf99
      
  • 如何解密MD5?

    • 由于 MD5 在哈希函数中,因此它是不可逆的。这也是它用于签署文件和存储密码的原因。因此,网站管理员无法从他们的数据库中知道您的明文密码。
    • 现在如果 MD5 是单向函数,我们如何解密它?我们其实并不“解密”MD5,我们使用这个词是因为它很容易理解,但是哈希函数无法解密。目前的解密主要是 暴力破解 穷举法 将对应的值存入数据库并通过输入的哈希值进行匹配。
  • 如何创建强密码?

    • 例如,像[W0w,IcantBel13veStronghowisthisPa55phr4s3!]这样的密码, 即使使用最快的 GPU 也需要几个世纪才能被暴力破解。
  • 一些 MD5 解密网站

    •   国内Md5解密:
        http://t007.cn/
        https://cmd5.la/
        https://cmd5.com/
        https://pmd5.com/
        http://ttmd5.com/
        https://www.somd5.com/
        http://www.chamd5.org/
        
        国外Md5解密:
        https://hashes.com/en/decrypt/hash
        https://www.md5tr.com/
        http://md5.my-addr.com/
        https://md5.gromweb.com/
        https://md5decrypt.net/en/
        https://md5hashing.net/hash/md5/
        https://www.whatsmyip.org/hash-lookup/
        https://www.md5online.org/md5-decrypt.html
        https://md5-passwort.de/md5-passwort-suchen
      

14.敲击码(Tap code)

  1.  源文本(不区分大小写): ackz
     编码后(K字符不编码): 111314
    
  2. 敲击码(Tap code)是一种以非常简单的方式对文本信息进行编码的方法。因该编码对信息通过使用一系列的点击声音来编码而命名,敲击码是基于 5×5 方格波利比奥斯方阵来实现的,不同点是 K 字母被整合到 C 中( K 字符不被编码)。

  3.  敲击码表:
     
        1  2  3  4  5
     1  A  B C/K D  E
     2  F  G  H  I  J
     3  L  M  N  O  P
     4  Q  R  S  T  U
     5  V  W  X  Y  Z
     
     A -> 1,1 -> 11
     C -> 1,3 -> 13
    

15.莫尔斯电码(Morse Code)

  1.  源文本: 123abc
     编码后: .---- ..--- ...-- .- -... -.-.
    
  2. 摩尔斯电码(Morse Code)是由美国人萨缪尔·摩尔斯在 1836 年发明的一种时通时断的且通过不同的排列顺序来表达不同英文字母、数字和标点符号的信号代码

  3. 摩尔斯电码表

换位加密

1.栅栏密码(Rail-fence Cipher)

  1.  明文: 123456789
     密钥: 3(三栏栅栏/分成三行)
     密文1: 147258369
     密文2: 159246837
    
  2. 栅栏密码(Rail-fence Cipher)就是把要加密的明文分成 N(密钥) 个一组,然后把每组的第1个字符组合,每组第2个字符组合...每组的第N (最后一个分组可能不足N个)个字符组合,最后把他们全部连接起来就是密文

  3.  明文: 123456789
     加密1:
     1 4 7
     2 5 8
     3 6 9
     密文1: 147258369
     栅栏图案类似:
     |||||||||
     
     加密2:                 当 N = 4: 
     1   5   9     1     7
      2 4 6 8       2   6 8
       3   7         3 5   9
                      4
     密文2: 159246837
     栅栏图案类似:
     |-|-|-|-|-|-|-|-|
    
  4. 附:栅栏密码中 空格 看情况是否要保留

2.曲路密码(Curve Cipher)

  1.  明文: 0123456789abcdef
     密钥: 4行4列(额,就明文字符数的因子,好像只要一个数就够了)
     密文: fb7326aed951048c
    
  2. 曲路密码(Curve Cipher)是一种换位密码,需要事先双方约定密钥(也就是曲路路径)。

  3. 明文:0123456789abcdef

  4. 这里明文一共 16 个字符,可以分为 2×8 或 4×4,这里取 4×4。这 4×4 就是密钥

  5. 填入 4 行 4 列表(事先约定填充的行列数)image-20230114172953608

  6. 加密的回路线(事先约定填充的行列数)

  7. image-20230114173332616

3.列移位密码(Columnar Transposition Cipher)

  1.  明文: 123456789
     密钥: 213(或 daf)
     密文: 258369147
    
  2. 列移位密码(Columnar Transposition Cipher)是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文。

  3.  明文:123456789
     密钥:cab
    
  4. 填入 3 行 3 列表(事先约定填充的行列数,如果明文不能填充完表格可以约定使用某个字母进行填充)

  5. image-20230114194358148

  6.  按 abc 在字母表中的出现的先后顺序进行编号,我们就有 a 为 1,b 为 2,c 为 3,所以先写出 a 列,其次 b 列,以此类推写出的结果便是密文:
     c a b
     3 1 2
    
  7. image-20230115140952166

  8.  密文: 258369147
    
  9. 另外由列移位密码变化来的密码也有其他的,比如Amsco密码(Amsco Cipher)和Cadenus密码(Cadenus Cipher)。

替换加密

1.埃特巴什码(Atbash Cipher)

  1.  明文: hello world
     密文: svool dliow
    
  2. 埃特巴什码(Atbash Cipher)是一种以字母倒序排列作为特殊密钥的替换加密,也就是下面的对应关系:

  3.  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
     | | | | | | | | | | | | | | | | | | | | | | | | | |
     Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
    

2.凯撒密码(Caesar Cipher)

  1.  明文: hello world
     偏移量: 1
     密文: ifmmp xpsme
    
  2. 凯撒密码(Caesar Cipher)或称恺撒加密、恺撒变换、变换加密、位移加密)是一种替换加密,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是 3 的时候,所有的字母 A 将被替换成 D, B 变成 E,以此类推。

  3. 变异凯撒

    1. 同一串字符串中,偏移量不一定是定值,可以为具有一定规律的 值,例如:

    2.  """
       题目来源:https://buuoj.cn/challenges#变异凯撒
       加密密文:afZ_r9VYfScOeO_UL^RWUc
       格式:flag{ }
       
       解:
       这就是找 每个字符间的对应关系,可先转化为 ascii 码。
       通过提示,就找前 5 个字符间的关系
       加密密文: 97 102 90 95 114
       flag{: 102 108 97 103 123
       相减得到: 5   6   7  8  9
       得到规律求出明文:
       """
       str = 'afZ_r9VYfScOeO_UL^RWUc'
       k = 5 # 第一个差值
       for i in str:
           asc = ord(i)   # 转 ascii
           asc = asc + k  # 加上偏移量
           asc = chr(asc) # 转字符
           print(asc,end="") # 输出单个明文
           k = k + 1
      

3.ROT5/13/18/47:

  1.  明文: 123abc[]\
     ROT5(只对数字进行编码): 678abc[]\
     ROT13(只对字母进行编码): 123nop[]\
     ROT18(只编码数字与字母): 678not[]\
     ROT47(对 ascii 33-126 进行编码): `ab234,.-
    
  2. ROT5/13/18/47是一种简单的码元位置顺序替换暗码。此类编码具有可逆性,可以自我解密,主要用于应对快速浏览,或者是机器的读取。

  3. ROT5:rotate by 5 places简写,意思是旋转5个位置,以此类推。下面分别说说它们的编码方式:

  4. ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6。

  5. ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O。

  6. ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。

  7. ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母 z,编码后变成大写字母 K,当前为数字 0,编码后变成符号 _ 。用于 ROT47 编码的字符其 ASCII 值范围是 33-126,具体可参考 ASCII 编码

4.简单替换密码(Simple Substitution Cipher)

  1. 简单换位密码(Simple Substitution Cipher)加密方式是以每个明文字母被与之唯一对应且不同的字母替换的方式实现的,它不同于恺撒密码,因为密码字母表的字母不是简单的移位,而是完全是混乱的。

  2.  比如对应关系为(码表):
     abcdefghijklmnopqrstuvwxyz
     phqgiumeaylnofdxjkrcvstzwb
     
     那么加密后为: 
     明文:hello world
     密文:ehnnd tdkng
    
  3. 解密:当密文数据足够多时这种密码我们可以通过字频分析方法破解或其他方法破解。

5.希尔密码(Hill Cipher)

  1.  明文: abcd
     密钥: 1234(这里是 2*2)
     密文: CEIS
    
  2. 希尔密码(Hill Cipher)是基于线性代数多重代换密码,由 Lester S. Hill 在1929年发明。每个字母转换成26进制数字:image-20230115191857893

  3. 一串字母当成 n 维向量,跟一个 n×n 的矩阵相乘,再将得出的结果模26。注意用作加密的矩阵(即密匙)必须是可逆的,否则就不可能解码。只有矩阵的行列式和26互质,才是可逆的。

  4. 这里涉及到了一些数学的行列式知识,希尔密码_百度百科

  5. 希尔(Hill Cipher)加密/解密(可以自己试一下,这样好理解一点, 应该)

6.猪圈密码(Pigpen Cipher)

  1. 猪圈密码(Pigpen Cipher 或称九宫格密码、朱高密码、共济会密码或共济会员密码),是一种以格子为基础的简单替代式密码。
  2. 明文字母和对应密文:img img
  3. 散装效果image-20230115194750330
  4. 若使用范例的关键字,则明文"X marks the spot"的加密结果将呈现如下:image-20230115205458311

7.波利比奥斯方阵密码(Polybius Square Cipher)

  1.  明文: hello world
     密钥: abcdefghiklmnopqrstuvwxyz
     密文: 2315313134 5234423114
    
  2. 波利比奥斯方阵密码(Polybius Square Cipher或称波利比奥斯棋盘)是棋盘密码的一种,是利用波利比奥斯方阵进行加密的密码方式,简单的来说就是把字母排列好,用坐标(行列)的形式表现出来。字母是密文,明文便是字母的坐标。

  3.  常见的排布方式(排布矩阵就是相当密钥,这里只是列举的最常见的排布):
       12345
       -----
     1|ABCDE
     2|FGHIK
     3|LMNOP
     4|QRSTU
     5|VWXYZ
     
     无论矩阵如何排布 j 与 i 都是在同一个位置
    

8.ADFGX 和 ADFGVX密码

  1. ADFGX(ADFGX Cipher) 密码

    1.  明文: hello world
       密钥: phqgmeaynofdxkrcvszwbutil
       密文: ADDAXXXXDX GXDXFXXXFD
       列位移密钥: byeworld
       最终密文: ADXXXDGFXFXDXXAXDDXX
      
    2. ADFGX 密码 (ADFGX Cipher) 结合了改良过的 Polybius 方格替代密码与单行换位密码的矩阵加密密码,使用了 5 个合理的密文字母:ADFGX,这些字母之所以这样选择是因为当转译成摩斯电码 ( ADFGX 密码是德国军队在一战发明使用的密码)不易混淆,目的是尽可能减少转译过程的操作错误。

    3.  加密矩阵示例:
         ADFGX
         -----
       A|PHQGM
       D|EAYNO
       F|FDXKR
       G|CVSZW
       X|BUTIL
      
    4. image-20230115204435568

    5.  # 已知密钥加解密:
       from pycipher import ADFGX
       a = ADFGX('phqgmeaynofdxkrcvszwbutil','HOWAREU')
       a.encipher('THE QUICK BROWN FOX') # 得到 'DXADFAGXFXFFXDFXGGXDGFGAADAADXXF'
       a.decipher('DXADFAGXFXFFXDFXGGXDGFGAADAADXXF') # 得到 'THEQUICKBROWNFOX'
      
  2. ADFGVX 密码

    1. ADFGVX 密码实际上就是 ADFGX 密码的扩充升级版,一样具有 ADFGX 密码相同的特点,加密过程也类似,不同的是密文字母增加了 V,使得可以再使用 10个 数字来替换明文。(6*6=36=26+10)

    2.  加密矩阵示例:
         ADFGVX
         ------
       A|ABCDEF
       D|GHIJKL
       F|MNOPQR
       G|STUVWX
       V|YZ0123
       X|456789
      

9.夏多密码(曲折加密)

  1. 夏多密码是作者麦克斯韦·格兰特在中篇小说《死亡之链》塑造夏多这一英雄人物中所自创的密码,如下图所示:img
  2. 注意,在以上所示的字母表密钥的底部,列有四个附加符号1,2,3,4.他们可以放在密文中的任何地方。每个附加符号指示,如何转动写有密文的纸张,再进行后续的加密或解密操作,直到出现另一个附加符号。可以把每个附加符号中的那根线看作是指示针,它指示了纸张的上端朝上,朝右,朝下,朝左。比如说:如果出现符号3,那么纸张就应该转动180度,使其上端朝下;符号2表示纸张上端朝右,依次类推。
  3. 明文:I AM IN DANGER SEND HELP
  4. 密文:

img

10.普莱菲尔密码(Playfair Cipher)

  1.  明文:HELLO WORLD
     密钥: CULTURE
     密文: GABLWUSUTB
    
  2. 普莱菲尔密码(Playfair Cipher)是第一种用于实际的双字替换密码,用双字加密取代了简单代换密码的单字加密,很明显这样使得密文更难破译,因为使用简单替换密码的频率分析基本没有什么作用,虽然频率分析,通常仍然可以进行,但是有 25×25=625 种可能而不是25种可能,可以分为三个步骤,即编制密码表、整理明文、编写译文。

  3. 普莱菲尔密码又称为单方密码(Single Cipher)之后又出现它的升级版 Double Playfair,也就是[二方密码] (Two-square Cipher),在之后又有四方密码(Four-square Cipher)。

  4.  明文:HELLO WORLD
     密钥:CULTURE
    
  5. 解密:

    1. 编制密码表
      1. 整理密钥字母C U L T U R E,去掉后面重复的字母得到:C U L T R E
      2. 用上一步得到的字母自上而下来填补 5 乘 5 方表的纵列(也可横排),之后的空白按照相同的顺序用字母表中剩余的字母依次填补完整:image-20230115221532960
      3. 这一步需要注意的要点:整理密钥字母时,如果出现"Z",则需要去除,因为在英文里"Z"的使用频率最低,相应的如果是德文,则需将 "I" 与 "J" 当作一个字母来看待,而法语则去掉 "W" 或 "K" 。
    2. 整理明文
      1. 我们要遵循的原则是“两个一组”,得到是若干个两两成对的字母段,用到的是明文与字母"X"
      2. 对于末尾的单个字母要加上一个"X"使之成对(明文: ABC): AB CX
      3. 对于相连字母相同者,将第二次出现的字母替换为“X”(明文: MISS): MI SX
      4. 故将上面的明文两两一组按顺序排开,得到:HE LX OW OR LD
    3. 编写密文
      1. 对于每个字母对,要严格遵循如下的原则:
        1. 如果两个字母在同一行则要用它右邻的字母替换,如果已在最右边,则用该行最左边的替换,如明文为"CL",依据上表,应替换为"UT";
        2. 如果两个字母在同一列则要用它下边的字母替换,如果已在最下边,则用该行最上边的替换,如明文为"NV",依据上表,应替换为"VC";
        3. 3.如果两个字母在不同的行或列,则应在密码表中找两个字母使四个字母组成一个矩形,明文占据两个顶点,需用另外两个顶点的字母替换,如明文为"CQ",可以替换为"TN"(顺序很重要——这对中的第一个加密字母与第一个明文字母位于同一行, C 在前,那么与 C 同一行的 T 也应该在前)。
      2. 按照上述原则,将明文 HE LX OW OR LD 加以转换得到 GA BL WU SU TB(/表示或者,不过一般用I不用J,所以分析密文时你看25个字母都有而只差一个字母没有用到可以考虑一下这种加密方式)将得到的字母改为大写,得到密文 GABLWUSUTB。
  6. 可以在这里这里进行加密解密(这里加解密是横向编制密码表)

11.维吉尼亚密码(Vigenère Cipher)

  1.  明文 : HELLO WORLD
     关键词: BYE
     密文 : ICPMMAPPPE
    
  2. 维吉尼亚密码(Vigenère Cipher)是在单一恺撒密码的基础上扩展出多表代换密码,根据密钥(当密钥长度小于明文长度时可以循环使用)来决定用哪一行的密表来进行替换,以此来对抗字频统计,更多->维吉尼亚密码_百度百科

  3. 密表:img

  4. 加密过程:

    1. 假设明文为: HELLOWORLD

    2. 选择一个关键字并重复它直到与明文的长度匹配,如关键词为 BYE 时,密钥为: BYEBYEBYEB

    3. 如果第一行为明文字母,第一列为密钥字母,那么明文字母 H 列和密钥字母 B 行的交点就是密文字母 I,以此类推,可以得到

    4.  明文: HELLOWORLD
       密钥: BYEBYEBYEB
       密文: ICPMMAPPPE
      
    5. 解密的过程则与加密相反。例如:根据密钥第一个字母 B 所对应的 B 行字母表,发现密文第一个字母 I 位于 H 列,因而明文第一个字母为 H。密钥第二个字母.......

  5. 未知密钥破解:

    1. 可以参考维吉尼亚密码分析, 这篇文章,破解维吉尼亚密码第一步是确定密钥长度,维吉尼亚密码分析这篇文章里介绍了使用重合指数算法来确定密钥长度,在确定密钥长度后就可以尝试确定密钥,通常我们可以使用卡方检验来找到每个字母的偏移量,基于维吉尼亚密码分析一文中的算法实现的工具破解示例
  6. 变种

    1. img
    2. 格罗斯费尔德密码(Gronsfeld cipher)
      1. 实际上和维吉尼亚密码相同,除了使用了数字来代替字母以外没有什么区别。
      2. 数字可以选择一种数列,如斐波那契数列,或者一些其他的伪随机序列。格罗斯费尔德密码密码分析过程和维吉尼亚密码大同小异,不过,自动密钥密码不能使用[卡西斯基算法](维吉尼亚密码_百度百科 (baidu.com))来破译,因为自动密钥密码的密钥不重复循环使用,破译自动密钥密码最好的方法的就是从密文不断尝试和猜测其中明文或密钥的一部分。
      3. 描述了一种攻击格隆斯菲尔德密码的方法
      4. Gronsfeld Cipher - 在线解码器、编码器
    3. 滚动密钥密码(Running Key Cipher)
      1. 滚动密钥密码(Running Key Cipher)和维吉尼亚密码有着相同的加密机制,是维吉尼亚密码的一种变体,与维吉尼亚密码的区别是密钥的选取,维吉尼亚使用的密钥简短,而且重复循环使用,与之相反,滚动密钥密码使用很长的密钥,比如引用一本书作为密钥。这样做的目的是不重复循环使用密钥,使密文更难破译,尽管如此,滚动密钥密码还是可以被攻破,因为有关于密钥和明文的统计分析模式可供利用,如果滚动密钥密码使用统计上的随机密钥来源,那么理论上是不可破译的,因为任何可能都可以成为密钥,并且所有的可能性都是相等的。

12.自动密钥密码(Autokey Cipher)

  1. 介绍

    1. 自动密钥密码(Autokey Cipher)是多表替换密码,是维吉尼亚(Vigenere)密码的扩展,但使用不同的方法生成密钥,通常来说要比维吉尼亚密码更安全。它的密钥开头是一个关键词,之后则是明文的重复。

    2.  明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
       
       关键词:CULTURE
       
       自动生成密钥:CULTURE THE QUICK BROWN FOX JUMPS OVER THE
       
       接下来的加密过程和维吉尼亚密码类似,从密表可得:
       
       密文:VBP JOZGD IVEQV HYY AIICX CSNL FWW ZVDP WVK
      
  2. 未知关键词破解

    1. 自动密钥密码_百度百科
    2. 自动密钥密码分析文章,可基于文中的算法实现的工具来破解示例。

13.博福特密码(Beaufort Cipher)

  1. 博福特密码(Beaufort Cipher),是一种类似于维吉尼亚密码的代换密码,由弗朗西斯·蒲福(Francis Beaufort)发明。它最知名的应用是Hagelin M-209 密码机。博福特密码属于对等加密,即加密演算法与解密演算法相同。

  2. img

  3.  明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
     
     密钥(循环使用,密钥越长相对破解难度越大):CULTURE
     
     加密过程:如果第一行为明文字母,第一列为密文字母,那么沿明文字母 T 列出现密钥字母 C 的行号就是密文字母 J,以此类推。
     
     密文:JNH DAJCS TUFYE ZOX CZICM OZHC BKA RUMV RDY
    

14.Porta密码(Porta Cipher)

  1. 用的好像不多

  2. Porta密码(Porta Cipher)是一个由意大利那不勒斯的医生Giovanni Battista della Porta发明的多表代换密码,Porta密码具有加密解密过程的是相同的的特点。

  3.  密表: 
     KEY|ABCDEFGHIJKLMNOPQRSTUVWXYZ
     ---|--------------------------
     A,B|NOPQRSTUVWXYZABCDEFGHIJKLM
     C,D|OPQRSTUVWXYZNMABCDEFGHIJKL
     E,F|PQRSTUVWXYZNOLMABCDEFGHIJK
     G,H|QRSTUVWXYZNOPKLMABCDEFGHIJ
     I,J|RSTUVWXYZNOPQJKLMABCDEFGHI
     K,L|STUVWXYZNOPQrIJKLMABCDEFGH
     M,N|TUVWXYZNOPQRSHIJKLMABCDEFG
     O,P|UVWXYZNOPQRSTGHIJKLMABCDEF
     Q,R|VWXYZNOPQRSTUFGHIJKLMABCDE
     S,T|WXYZNOPQRSTUVEFGHIJKLMABCD
     U,V|XYZNOPQRSTUVWDEFGHIJKLMABC
     W,X|YZNOPQRSTUVWXCDEFGHIJKLMAB
     Y,Z|ZNOPQRSTUVWXYBCDEFGHIJKLMA
    
  4.  明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
     
     密钥(循环使用,密钥越长相对破解难度越大):CULTURE
     
     加密过程:明文字母 T 列与密钥字母 C 行交点就是密文字母 F,以此类推。
     
     密文:FRW HKQRY YMFMF UAA OLWHD ALWI JPT ZXHC NGV
    
  5. 已知密钥在线加解密Porta Cipher - 许愿星

15.培根密码:

  1.  明文: hello
     密文: AABBBAABAAABABAABABAABBAB
    
  2. 培根密码(Baconian Cipher)是一种替换密码,每个明文字母被一个由5字符组成的序列替换,最初的加密方式就是由'A'和'B'组成序列替换明文(所以你当然也可以用别的字母),比如字母'D'替换成"aaabb",以下是全部的对应关系(另一种对于关系是每个字母都有唯一对应序列,I和J与U/V各自都有不同对应序列):

  3.  A = aaaaa  I/J = abaaa   R = baaaa
     
     B = aaaab   K = abaab    S = baaab
     
     C = aaaba   L = ababa    T = baaba
     
     D = aaabb   M = ababb   U/V = baabb
     
     E = aabaa   N = abbaa    W = babaa
     
     F = aabab   O = abbab    X = babab
     
     G = aabba   P = abbba    Y = babba
     
     H = aabbb   Q = abbbb    Z = babbb
    

16.双密码(Bifid Cipher)

  1.  明文: HELLO WORLD
     密钥(阵): atflcxepwnkzirmsqhbudgyvo
     密钥(分组): 5
     密文: qaywunkvvs
    
  2. 双密码(Bifid Cipher)结合了波利比奥斯方阵换位密码,并采用分级实现扩散,这里的“双”是指用2个密钥进行加密。双密码是由法国FelixDelastelle发明,除此之外Felix Delastelle还发明了三分密码(Trifid Cipher),四方密码(Four-Square Cipher)。还有一个两方密码(Two-Square)与四方密码类似,共轭矩阵双密码(Conjugated Matrix Bifid Cipher)也是双密码的变种。

  3.  示例密阵(就上面的那个密钥):
       12345
     1|atflc
     2|xepwn
     3|kzirm
     4|sqhbu
     5|dgyvo
    
  4. 加密过程:

    明文: HELLO WORLD
    
    经过密阵转换:
    行: 42115 25315
    列: 32445 45441
    
    每 n 个数字分一组: n 取决于分组密钥是多少,这里假设为 5
    # 我这里本来就是 5 个一组的,就不用分了
    42115 25315
    32445 45441
    
    合并:
    42115324452531545441
    
    在经过密阵转换后密文: QAYWU NKVVS
    
  5. 未知密阵破解

    1. 手工分析破解双密码是有一定难度的,每个字母都是同过3个数字进行非线性代替转换,而且之后还会对字母顺序进行打乱,这样使双密码比一些替换密码和换位密码更难破解。然而,现在是计算机时代,这张加密方式没有安全性可言,通过模拟退火算法就能快速找到双密码的密阵。
    2. 这里推荐一篇详细的双密码破解分析的文章,基于模拟退火算法实现的工具破解:

17.三分密码:

  1. 三分密码(Trifid Cipher)结合换位和替换,三分密码与双密码非常相似,差别之处就是用除了 3×3×3 的密阵代替 5×5 密阵。

  2.  密钥(密阵): EPSDUCVWYM.ZLKXNBTFGORIJHAQ
     示例密阵:
      |方阵1|方阵2|方阵3
      |123|123|123
     -|---|---|---
     1|EPS|M.Z|FGO
     2|DUC|LKX|RIJ
     3|VWY|NBT|HAQ
    
  3. 加密过程:

    1. 明文: THE QUICK BROWN FOX.

    2. 经过密阵转换:

      T H E Q U I C K B R O W N F O X .
      2 3 1 3 1 3 1 2 2 3 3 1 2 3 3 2 2
      3 3 1 3 2 2 2 2 3 2 1 3 3 1 1 2 1
      3 1 1 3 2 2 3 2 2 1 3 2 1 1 3 3 2
      
      T(233)表示 T 在第 2 个方阵第 3 行第 3 列的位置
      
    3. 分组(分组密钥以 5 为例):

      THEQU ICKBR OWNFO X.
      23131 31223 31233 22
      33132 22232 13311 21
      31132 23221 32113 32
      
    4. 合并:

      23131 33132 31132 31223 22232 23221 31233 13311 32113 22 21 32
      
      在经过密阵转换后密文: 231313313231132312232223223221312331331132113222132
      密文: NOONWGBXXLGHHWSKW
      

18.四方密码(Four-Square Cipher)

  1. 四方密码(Four-Square Cipher)是类似普莱菲尔密码双字母加密密码,这样使加密效果强于其他替换密码,因为频率分析变得更加困难了。
  2. 四方密码使用 4 个预先设置的 5×5 字母矩阵,每个矩阵包括 25 个字母,通常字母 j 被融入到 i 中(维基百科上说 q 被忽略,不过这不重要,因为 q 和 j 都是很少出现的字母),通常左上和右下矩阵式是标准字母排序明文矩阵,右上和左下矩阵是打乱顺序的密钥矩阵。
  3. 示例矩阵:img
  4. 加密过程:
    1. 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
    2. 整理明文(分组不够时用X填充):TH EQ UI CK BR OW NF OX JU MP SO VE RT HE LA ZY DO GX
    3. 加密:分别在明文矩阵中找到 TH,分别找到他们在右上矩阵有左下矩阵的交点字母 ES 就是密文,以此类推。
    4. 密文:ESZWQAFHGTDKWHRKUENYQOLMQTUNWMBPTGHQ

19.棋盘密码(Checkerboard Cipher)

  1.  明文: T H E Q U I C K B R O W N F O X
     密钥1: KNIGHPQRSTOYZUAMXWVBLFEDC
     密钥2: QUICK BROWN # 这里我不太确定是不是这样写
     密文: RK BK RU OC OC BI NK BQ WK RI OQ WI BU NU OQ WU
    
  2. 棋盘密码(Checkerboard Cipher)是使用一个波利比奥斯方阵和两个密钥作为密阵的替换密码,在波利比奥斯方阵中J字母往往被包含在I字母中。

20.跨棋盘密码(Straddle Checkerboard Cipher)

  1.  明文: DEFEND THE EAST WALLOF THE CASTLE
     密钥1: fkmcpdyehbigqrosazlutjnwvx
     密钥2: 3 7
     密文: 690974672309938377275387070360723094383772709
    
  2. 跨棋盘密码(Straddle Checkerboard Cipher)是一种替换密码,当这种密码在结合其他加密方式,加密效果会更好。

  3. 加密过程:

    1. 跨式棋盘的关键是字母表的排列,例如 “fkmcpdyehbigqrosazlutjnwvx”,以及 2 个数字,例如 3 和 7。跨式棋盘的设置类似于这样(使用上面的关键信息):

        0123456789
       |----------
       |FKM CPD YE
      3|HBIGQROSAZ
      7|LUTJNWVX
      
    2. 第一行设置了前八个关键字母,留有两个空白点。它没有行标签。第二行和第三行标有最上面一行没有字母的两个数字,然后填写其余的关键字母。由于我们的网格中有 30 个槽位,并且我们在第一行中遗漏了两个字母,因此其他行中将有两个空余的字母。

    3. 为了加密,顶行的字母被简单地替换为标记其列的数字。其他行上的字母被它们的行号替换,然后是列号:

      D E F E N  D T  H  E E A  S  T  W  A  L  L  O  F T  H  E C A  S  T  L  E
      6 9 0 9 74 6 72 30 9 9 38 37 72 75 38 70 70 36 0 72 30 9 4 38 37 72 70 9
      
    4. 密文: 690974672309938377275387070360723094383772709

21.分组摩尔斯替换密码(Fractionated Morse Cipher)

  1. 分组摩尔斯替换密码(Fractionated Morse Cipher)首先把明文转换为莫尔斯电码,不过每个字母之间用x分开,每个单词用xx分开。然后使用密钥生成一个替换密表,这个密表包含所有. - x组合的情况(因为不会出现xxx的情况,所以一共26种组合)。

  2. 加密过程:

    1.  明文: HELLO WORLD
       密钥: MORSECODE
       
       密表: 
       MOUSECDABFGHIJKLNPQTUVWXYZ
       .........---------XXXXXXXX
       ...---XXX...---XXX...---XX
       .-X.-X.-X.-X.-X.-X.-X.-X.-
       
       说明: 密表下半部分是固定的,密表的安全性以及加密效果主要取决于使用的密钥。
      
    2. (类似)摩尔斯电码:

      ....x.x.-..x.-..x---xx.--x---x.-.x.-..x-..
      
      说明: 明文在转换为(类似)摩尔斯电码后进行每 3 个字符分组,再进行密表的查表。
      ... .x. x.- ..x .-. .x- --x x.- -x- --x .-. x.- ..x -..
       m   d   t   u   s   a   k   t   n   k   s   t   u   g
      
    3. 密文(经过密表替换): MDTUSAKTNKSTUG

22.格朗普雷密码(Grandpré Cipher)

  1. 格朗普雷密码(Grandpré Cipher)是替换密码的一种,一般使用 8 个 8 字母的单词横向填充 8x8 方阵,且第一列为一个单词,并且在方阵中26个字母都必须出现一次以上。

  2. 示例密阵:img

  3.  明文:T H E Q U I C K B R O W N F O 
     密钥: (上面那张图)
     密文:84 27 82 41 51 66 31 36 15 71 67 73 52 34 67
     
     说明:明文中的字母在密阵位置可能不止一个,所以加密结果可能有多种,但是不影响解密。密阵还有6x6,7x7,9x9,10x10几种。显然密阵越大每个字母被替换的情况就可能越多,那么加密效果就更好。
    

23.盲文密码:

imgimg

24.键盘密码:

一般用到的键盘密码就是手机键盘和电脑键盘两种,手机键盘一般为9宫格密码,电脑键盘即密文在电脑键盘上按顺序组成的字母或数字样式。

img

img

25.一些其他的

  • Quoted-printable编码
    1. MIME之quoted-printable编码与base64编码(例题+图解)
  • Bazeries密码(Bazeries Cipher)
    1. Bazeries密码(Bazeries Cipher)是换位密码和替换密码的组合,使用两个波利比奥斯方阵,一个明文字母方阵,使用一个随机的数字(一般小于1000000)的生成一个密钥矩阵同时作为第一轮明文划分分组,比如 2333 这个数字翻译为英文便是 TWO THOUSAND THREE HUNDRED THIRTY THREE,从第一个字母 T 开始选取不重复的字母,之后再从字母表中按序选取没有出现的字母组成密钥矩阵。
  • 仿射密码(Affine Cipher)
    1. 仿射密码_百度百科
  • Digrafid密码(Digrafid Cipher)
    1. Digrafid密码(Digrafid Cipher)使用两个密钥生成分别生成类似波利比奥斯方阵的3x9方格的密表。
    2. Digrafid Cipher - Kryptos and Cryptanalysis Information

代码混淆加密:

1.asp混淆加密: http://www.zhaoyuanma.com/aspfix.html

2.php混淆加密: http://www.zhaoyuanma.com/phpjmvip.html

3.css/js混淆加密: http://tool.css-js.com/

4.VBScript.Encode混淆加密: http://www.zhaoyuanma.com/aspfix.html

5.PPencode: http://namazu.org/~takesako/ppencode/demo.html

ppencode-Perl把Perl代码转换成只有英文字母的字符串。

img

6.RRencode: http://www.lab2.kuis.kyoto-u.ac.jp/~yyoshida/rrencode.html

rrencode可以把ruby代码全部转换成符号。

7.JJencode/AAencode: https://tool.zcmzcm.org/aadecode

jjencode将JS代码转换成只有符号的字符串,类似于rrencode,介绍的PPT,aaencode可以将

JS代码转换成常用的网络表情,也就是我们说的颜文字js加密。

jjencode/aaencode的解密直接在浏览器的控制台里输入密文即可执行解密

img

8.Jsfuck: http://www.jsfuck.com

JSFuck只用6个字符[ ]( ) ! + 来编写 JavaScript 程序。

img

9.Jother: http://tmxk.org/jother

jother是一种运用于javascript语言中利用少量字符构造精简的匿名函数方法对于字符串进行的编码方式。其中8个少量字符包括:`! + ( ) [ ]

{ }`。只用这些字符就能完成对任意字符串的编码。

jother直接在浏览器(IE可以)的控制台里输入密文即可执行解密:

img

10.Brainfuck: http://www.splitbrain.org/services/ook

Brainfuck是一种极小化的计算机语言,按照"Turing complete(完整图灵机)"思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简

单”的语言,BrainFuck 语言只有八种符号,所有的操作都由这八种符号(> < + - . , [ ])的组合来完成。

明文:hello!

译文:+++++ +++++ [->++ +++++ +++<] >++++ .---. +++++ ++..+ ++.<+ +++++ +++++ [->++ +++++ ++++< ]>+++ ++++. <++++ +++[- >---- ---<] >--.<

+++++ ++[->----- --<]> ----- ----- .<