shell
该文章主要介绍古典密码和隐写常用的密码和编码,日常中很少见,主要用于ctf比赛和考试学习
一、古典密码
1、古典密码概念概述
古典密码是密码学发展早期所使用的一系列加密技术,这些密码主要依靠手工操作或简单的机械装置来实现信息的加密和解密。它们是人类在长期的信息安全实践中逐步发展起来的,旨在保护信息不被未经授权的人员获取或篡改。
2、古典密码的核心特点
- 简单性:古典密码的加密和解密过程通常相对简单,易于手工实现。它们不依赖于复杂的数学算法或电子设备,而是基于一些基本的替换、置换或数学运算。
- 易破解性:由于古典密码的加密方法相对简单,且密钥空间有限,因此它们在现代密码学面前显得较为脆弱。通过穷举法、频率分析等方法,攻击者往往能够破解古典密码。
- 历史价值:尽管古典密码在现代密码学中已不再具有实用价值,但它们作为密码学发展的起点,具有重要的历史意义和研究价值。通过研究古典密码,我们可以了解密码学的基本原理和发展历程。
3、古典密码的主要类型
(1)替换密码
- 定义:替换密码是一种将明文中的每个字符替换为另一个字符的加密方法。替换规则可以基于固定的映射表(如凯撒密码)或动态生成的密钥(如维吉尼亚密码)。
- 示例:凯撒密码是一种简单的替换密码,它将明文中的每个字母按照字母表顺序向后(或向前)移动固定的位数。例如,将"A"替换为"D","B"替换为"E",以此类推。
(2)置换密码
- 定义:置换密码是一种通过重新排列明文中的字符顺序来实现加密的方法。置换规则可以基于固定的模式(如列置换)或动态生成的密钥。
- 示例:列置换密码将明文按行写入一个矩阵中,然后按照列的顺序读出密文。解密时,将密文按列写入矩阵,再按行读出明文。
(3)其他古典密码
- 栅栏密码:将明文分成若干组,每组包含相同数量的字符。然后,按照特定的顺序(如"之"字形)重新排列这些字符,形成密文。
- 棋盘密码:使用一个棋盘(如波利比奥斯方阵)将明文中的字符映射为数字或字母组合,从而实现加密。
4、古典密码的应用与局限性
- 应用:古典密码在古代和中世纪被广泛应用于军事、政治和外交等领域,用于保护敏感信息的安全。
- 局限性:随着密码学的发展,古典密码的易破解性逐渐暴露出来。现代密码学已经发展出了更为复杂和安全的加密算法,使得古典密码在现代信息安全领域中已不再适用。
5、古典密码对现代密码学的影响
尽管古典密码在现代密码学中已不再具有实用价值,但它们作为密码学发展的起点,为现代密码学提供了重要的启示和借鉴。通过研究古典密码,我们可以了解密码学的基本原理和发展历程,从而更好地理解和应用现代密码学技术。同时,古典密码中的一些思想和方法(如替换、置换等)仍然在现代密码学中发挥着重要作用。
6、常见的古典密码
(1)凯撒密码(Caesar Cipher)
原理 :凯撒密码是一种替换加密技术,将明文中的每个字母按照字母表顺序向后(或向前)移动固定位数(密钥)进行替换。例如,密钥为3时,A→D,B→E,...,Z→C。
加密示例:
-
明文:
HELLO
-
密钥:3
-
密文:
KHOOR
-
字母表移动:
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 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
解密 :将密文字母向前移动相同位数即可还原明文。
特点:简单易实现,但安全性低,易通过暴力破解(仅26种可能)。
加解密网站: 凯撒(Caesar)加密/解密 - Bugku CTF平台
(2)维吉尼亚密码(Vigenère Cipher)
原理 :多表替换密码,使用一个关键词作为密钥,对明文的每个字母应用不同的凯撒密码。例如,关键词为LEMON
时,第一个字母用L对应的凯撒表,第二个字母用E对应的表,依此类推。
加密示例:
- 明文:
ATTACKATDAWN
- 密钥:
LEMON
- 密文:
LXFOPVEFRNHR
- 过程 :
- A(明文)+ L(密钥)= L(密文)
- T + E = X
- T + M = F
- ...
解密 :根据密钥的每个字母确定对应的凯撒表,逆向替换即可还原明文。
特点:比凯撒密码更复杂,安全性更高,但历史上曾被卡西斯基试验和弗里德曼试验破解。
加解密网站: 维吉尼亚加密/解密 - Bugku CTF平台
(3)栅栏密码基础型(Rail Fence Cipher)
原理 :将明文按行排列成"栅栏"形状,然后按列读取形成密文。例如,两栏时,奇数位字母放第一行,偶数位放第二行。
加密示例:
-
明文:
WEAREDISCOVEREDFLEEATONCE
-
分组(两栏):
W A E I C V R D L E T N E E R D S O E E F E A O C
-
密文:
WAEICVRDLETNEERDSOEEFEAOC@
解密 :根据密文长度和栏数,将字母按列填充回栅栏形状,再按行读取。
特点:简单易用,但安全性较低,易通过分析字母分布破解。
加解密网站:栅栏加密/解密 - Bugku CTF平台
(4)栅栏密码W型(Zigzag Cipher)
原理 :栅栏密码的变种,字母按W型(或Z字形)路径排列在多行上,然后按行读取形成密文。例如,三栏时,字母按"下-上-下"路径排列。
加密示例:
-
明文:
HELLOWORLD
-
路径(三栏):
H . . . O . . . R . . . . E . L . W . L . D . . . L . . . O . . . .
-
密文:
HORELWLDLO
解密 :根据栏数和密文长度,将字母按W型路径放回原位,再按行读取。
特点:比基础型更复杂,安全性略高,但易被频率分析破解。
加解密网站:栅栏加密/解密 - Bugku CTF平台
(5)猪圈密码(Pigpen Cipher)
原理 :基于几何图形的替换密码,每个字母对应一个由点和线组成的特定符号。例如,A对应左上角的"L"形,B对应右上角的"L"形,依此类推。
加密示例:
-
明文:
HELLO
-
符号对应:
密文:对应的符号图形。
解密 :根据符号图形逆向查找字母。
特点:简单易记,曾被共济会等组织使用,但安全性低,易通过符号表破解。
加解密网址:猪圈密码转换器_猪圈密码翻译器_猪圈密码在线加密解密
(6)ROT13
原理 :一种特殊的凯撒密码,密钥固定为13,即字母表中的每个字母向后移动13位(A→N,B→O,...,Z→M)。由于字母表有26个字母,ROT13是自反的(加密和解密使用相同规则)。
加密示例:
-
明文:
HELLO WORLD
-
密文:
URYYB JBEYQ
-
字母表移动:
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 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
解密 :再次应用ROT13即可还原明文。
特点:常用于简单隐藏文本(如论坛中的剧透),无安全性可言,仅用于非敏感场景。
加解密网址:https://lzltool.cn/Toolkit/Rot13String
二、隐写术(信息隐藏)
1、文本隐藏加密
特征:加密过的密文会比原文的字节数多,当你按删除键的时候会发现某一处要按好多下才能把前面的字删掉
原理:它的原理是在密文中加入了不可见字符组成的编码,例如上述看似九个字符的一句话,通过字数查询可知它实际上有87个字符,多出的字符是由零宽空格实现的编码,因为零宽空格不占据空间,所以看不出它的存在。
使用:在进行文本隐藏加密时,将需要隐藏的文字写在括号中,就像这样"你好(有才华),我好喜欢你(画的画)!",然后加密即可隐藏括号内的文字。同时可以设定一个密码,这样只有知道密码的人才能解密隐藏的文字。密码可以是数字、字母和下划线,最多九位。
2、零宽隐写
特征:解密后明文与密文会分开显示,密文一般隐藏在第一个字后面。
与上面文本隐藏加密的原理一样,但过程不一样
3、莫尔斯电码
-
通过点、划和间隔表示字母,可用于隐写或信号传递。
-
特征:密文由不规律的
.
、/
、-
组成- 摩尔斯电码(Morse alphabet)(又译为摩斯电码)是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。
- 由美国人摩尔斯(Samuel Finley Breese Morse)于1837年发明,为摩尔斯电报机的发明(1835年)提供了条件。
- 摩尔密码加密的字符只有字符,数字,标点,不区分大小写,支持中文汉字
- 中文摩斯加密解密:本工具摩尔密码加密是互联网上唯一一个可以对中文进行摩斯编码的工具。
加密hello
三、现代编码与混淆技术
1、百家姓暗号
原理 :通过百家姓中的73个不同的中文,用来代替数字0 - 9、字母a - z以及一些常用符号的一种加密方式。例如,赵-- 0,钱-- 1,孙-- 2,李-- 3,周-- 4,吴-- 5,郑-- 6,王-- 7,冯-- 8,陈-- 9,褚-- 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,福-- 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,薛-- . ,顾-- # ,尹-- % ,江-- & ,钟-- * 。
示例:
- 加密前 :
HELLO
- 加密过程:根据对应关系,H对应秦(h),E对应韩(e),L对应杨(f),L对应杨(f),O对应孔(o),所以加密后为"秦韩杨杨孔"。
- 加密后 :
秦韩杨杨孔
加密网址:https://www.ahz0.com/bjx.html
2、与佛论禅
原理 :将文本通过特定规则转换为类似佛经文字的密文,多借助在线工具实现。
示例:
- 加密前 :
hello world
在线工具:https://www.keyfc.net/bbs/tools/tudoucode.aspx
3、卡尔达诺栅格码
原理:使用一块按一定规则随机挖出许多小窗格的纸板或金属板(栅格),覆盖到一条精心编排的消息上,可以显示隐藏着另一条消息。
把明文伪装成垃圾邮件,看着这么多内容,其实我只是加密了YOU KILL AT ONCE
示例:
- 加密前 :原始消息为
YOU KILL AT ONCE
,准备一个有特定窗格的栅格板。 - 加密过程:将栅格板覆盖在精心编排的包含原始消息和其他无关字符的消息纸上,透过窗格显示隐藏消息。假设通过特定排列,栅格板覆盖后能显示隐藏消息。
- 加密后 :表面看到的是被栅格板部分覆盖后的包含原始消息和其他无关字符的混合内容,但透过栅格窗格能看到隐藏的
YOU KILL AT ONCE
。
在线工具:https://www.spammimic.com/
4、文本加密为汉字
原理:将文本通过特定算法转换为汉字编码,具体算法可能多样,这里假设一种简单规则,如将ASCII码转换为对应的汉字(仅为示例,实际可能有更复杂规则)。
特征:将明文加密成各种繁体字后面带俩等号
示例:
- 加密前 :
ABC
(A的ASCII码为65,B为66,C为67) - 加密过程:假设一种简单映射,65对应"一",66对应"二",67对应"三"(仅为示例,实际规则会更复杂)。
- 加密后 :
一二三
5、 颜文字JS加密
原理:利用颜文字符号组合成可执行的JavaScript代码,通过复杂的字符替换实现代码的混淆。
特征:一堆颜文字构成的js代码,在F12中可直接解密执行
示例:
- 加密前 :一段简单的JavaScript代码,如
alert("Hello, JavaScript")
- 加密过程 :将代码中的字符用颜文字等符号替换,例如将
alert
替换为颜文字组合(这里仅为概念示例,实际替换规则复杂),可能变成类似😀😃😄("😁");
(实际加密后的代码形式会复杂得多且能正常运行)。 - 加密后 :
😀😃😄("😁");
(运行效果与原代码相同,弹出提示框)
在线网址:https://utf-8.jp/public/aaencode.html
6、 jother编码
原理:在JavaScript语言中,利用少量特定字符(如"+"、"!"、"("、")"、"["、"]"、"{"、"}")构造精简的匿名函数对与字符串的编码方式。基于JavaScript的特性,如布尔值转换、类型转换等。
特征:只用! + ( ) [ ] { }
这八个字符就能完成对任意字符串的编码。也可在F12中解密执行
示例:
- 加密前 :
alert("Hello");
- 加密过程 :利用jother编码规则,将代码转换为仅用特定字符组成的代码,例如转换后可能为
[]["filter"]["constructor"]("return alert")()(["Hello"]);
(此为简化示例,实际编码会更复杂)。 - 加密后 :
[]["filter"]["constructor"]("return alert")()(["Hello"]);
(运行效果与原代码相同)
7、JSFuck编码
原理:只使用六个字符[ ] ( ) ! +来编写任何有效的JavaScript代码。基于布尔值(如![]等价于false,!![]等价于true)、类型转换(如[]等价于0,[]+[]等价于"")、构建字符串(利用String.fromCharCode()函数等)、访问对象属性(使用方括号[]来访问对象属性)等核心概念。
特征:与jother很像,只是少了{ }
示例:
- 加密前 :
alert("Hello");
- 加密过程:通过一系列复杂的操作,利用六个字符构建出能实现相同功能的代码。例如先构建数字和字符串,再获取相关函数,最后组合成可执行的代码(手动编写过程繁琐,这里不详细展开)。
- 加密后 :一段仅由[ ] ( ) ! +组成的复杂代码(如
[][([+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]+[])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]])()
(此为能实现alert("Hello")
功能的JSFuck编码示例,实际可手动优化简化)

在线网址:https://jsfuck.com/
8、Quoted-Printable
原理:任何一个8位的字节值可编码为3个字符:一个等号"="后跟随两个十六进制数字(0 - 9或A - F)表示该字节的数值。通常用于电子邮件中,使邮件能支持非ASCII字符、二进制格式附件等多种格式的邮件消息。
特征:这种编码常用与邮件处理,只能对汉字进行编码,特征是=加两个大写字母或数字组合
示例:
- 加密前 :
你好
(在UTF - 8编码中,"你"的十六进制为E4 BD A0
,"好"的十六进制为E5 A5 BD
) - 加密过程 :按照规则,"你"会被编码为
=E4=BD=A0
,"好"会被编码为=E5=A5=BD
。 - 加密后 :
=E4=BD=A0=E5=A5=BD