密码学基础知识总结
密码学基础知识总结
一、Base编码
1. Base系列特征
2. 典型题型
- 叠套加密:多次Base编码嵌套(如HNCTF 2022 Week1题目)
- 换表加密:自定义字符映射表(如BJDCTF 2020题目)
# 换表解密示例custom_table = \"J K L M N O x y U V z A B C D E F G H 7 8 9 P Q I a b c d e f g h i j k l m W X Y Z 0 1 2 3 4 5 6 R S T n o p q r s t u v w + / =\"standard_table = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"cipher = \"FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw\"# 构建转换字典trans = str.maketrans(custom_table, standard_table)standard_cipher = cipher.translate(trans)print(base64.b64decode(standard_cipher))
二、古典密码
1. 替换密码
- 凯撒密码:位移变换
# 凯撒解密脚本def caesar_decrypt(cipher, shift): return \'\'.join([chr((ord(c)-ord(\'A\')-shift)%26+ord(\'A\')) if c.isupper() else chr((ord(c)-ord(\'a\')-shift)%26+ord(\'a\')) for c in cipher])
- 埃特巴什码:字母表镜像映射(A↔Z, B↔Y…)
- 简单替换:随机字母映射(需词频分析破解)
2. 移位密码
- 栅栏密码:
明文: THEQUICKBROWNFOX2栏栅栏:T E U C B O N F X H Q I K R W O密文: TEUCBOFNXHQIKRWO
- Playfair密码:5×5矩阵双字母加密
- 维吉尼亚密码:多表替换(需卡西斯基试验破译)
3. 特殊编码
- 社会主义核心价值观编码:中文词语映射
- 猪圈密码:符号替代(如SWPUCTF 2021题目)
三、近代密码
1. Enigma机
- 德国二战加密设备,通过转子机械实现多表替换
四、现代密码
1. 对称密码
# AES加密示例from Crypto.Cipher import AESkey = b\'16byteslongkey!!\'cipher = AES.new(key, AES.MODE_ECB)ciphertext = cipher.encrypt(b\'SecretMessage16\') # 需填充至16字节倍数
2. 非对称密码
-
RSA算法:
- 密钥生成:( n = p \\times q ), ( \\phi(n)=(p-1)(q-1) ), 选择e使( gcd(e,\\phi(n))=1 ), 计算d满足( ed \\equiv 1 \\mod \\phi(n) )
- 加密:( c \\equiv m^e \\mod n )
- 解密:( m \\equiv c^d \\mod n )
# RSA解密示例from Crypto.Util.number import long_to_bytesp = 152276107194759839394339252953668929833379494272797635215678777394989176086311370136035478447887926444275784082066390686965320698243113804043171803008108957334907494436138284735908220245791716231134027668300903468613086977898318244422816904811663818867009341751581380232066351461067404386138711392602905182327q = 165862216368738151171691047077971125385823304861583668749112440485286071513555171553668744837558717911342949436706045003893101207778257828156155579957939073590381726467515305197248665285721804095245979532718423232742857246879254699058634781094524194465195004455721760308439281036465034307352501227102299122599e = 65537c = 8714149934588122613890609205826559063957396235456334581066750104141833387128819259074228632737215784067681665337373847122241506740977460425676706234123688048971299968252735566083061567386357327514300746902937654004543191945690400727133317228366779579116882233771039719002815276546167694160681831378762223177951840415429867605824997691072569915435484862548063841182891523397571914055707256503122950455644515402154037908557382756498138387988939464887512595990270123841900640997837144301259531459279512993819808359480410211723491073722980281648910041025010174785548169983002872841283535091066006242941399443173584257860n = p * qphi = (p-1)*(q-1)d = pow(e, -1, phi)print(long_to_bytes(pow(c, d, n)))
-
ECC算法:基于椭圆曲线离散对数问题
3. 哈希函数
- MD5碰撞示例:
import hashlibhashlib.md5(b\"message\").hexdigest() # 输出32位16进制字符串
五、攻击技术
-
密码分析:
- 差分分析(针对DES)
- 线性分析(针对AES)
- 模数分解(针对RSA)
-
侧信道攻击:
- 计时攻击(RSA加密时间差异)
- 功耗分析(智能卡攻击)
-
工具推荐:
- 在线解码:CyberChef
- 哈希查询:CMD5
- 密码破解:Hashcat
建议配合实际CTF题目进行练习,重点关注:- Base编码的层层嵌套- 古典密码的词频分析- RSA各攻击场景的实现- 现代密码库的正确调用方式