仿射密码,题目来源:BITSCTF 2017
fanfie
题目密文:
1 | MZYVMIWLGBL7CIJOGJQVOA3IN5BLYC3NHI |
base解密、rot解码均失败,猜测为仿射密码或是替换密码。
BITSCTF进行base32加密得到:
1 | IJEVIU2DKRDA==== |
对字母编码:
1 | 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 2 3 4 5 6 7 |
与密文对比发现 I->M 匹配, D->L 匹配(离谱orz)
相应字母的编码比对可得:
1 | 3 -> 11 4 -> 24 8 -> 12 20 -> 8 21 -> 21 25 -> 9 26 -> 22 |
仿射密码
编码表: A-Z 对应数字 0-25 (通常情况)
明文:hot(编码:7,14,19)
加密:设密钥 K = (7,3),编码表总数 n = 26,
(7 × 7 + 3) mod 26 = 52 mod 26 =0
(7 × 14 + 3) mod 26 = 101 mod 26 =23
(7 × 19 + 3) mod 26 =136 mod 26 =6
对应密文:AXG
模逆:若a,b两数的乘积对正整数n取模的结果为1. 则称a,b互为另外一个的模逆.
3×7 = 21; 21 % 20 = 1 ; 所以3,7 互为 20 的 模逆
9×3 = 27; 27 % 26 = 1 ; 所以9,3 互为 26 的 模逆
求模逆代码(C++):
1 | #include<iostream> |
密钥求解代码(C++):
1 | #include<iostream> |
求得密钥 K(13,4),可以得到密码表如下:
1 | 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 2 3 4 5 6 7 |
密文仿射,得到明文:IJEVIU2DKRDHWUZSKZ4VSMTUN5RDEWTNPU
base32解密得:BITSCTF{S2VyY2tob2Zm}