[CTF]凯撒密码

[CTF]凯撒密码

--------------------- 

作者:___Blue_H 

来源:CSDN 

原文:https://blog.csdn.net/qq_37653144/article/details/80773548

概述


著名的凯撒密码是代换密码的一种,据说是罗马*末期的军事家、政治家,罗马帝国的奠基者凯撒率先使用加密函,因此这种加密方法被称为凯撒密码。凯撒密码的原理很简单:通过把字母移动一定的位数来实现加解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量为3时,所有的字母(不区分大小写)A被替换成D,B被替换成E,Z被替换成C。其公式定义如下:

加密

[CTF]凯撒密码

解密

[CTF]凯撒密码

综上,凯撒密码的明文空间和密文空间都是26(字母表大小),偏移量就是密钥。当密钥k为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

密码表

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

实现

根据上述,密钥k为3时,明文China被加密成密文FKLQD

void Caesar_E (std::string &s, int k) { //加密
    for (char &ch : s)
        ch = 'A'+(toupper(ch)-'A'+k)%26;
}
 
void Caesar_D (std::string &s, int k) { //解密
    for (char &ch : s)
        ch = 'A'+(toupper(ch)-'A'+26-k%26)%26;
}

特点


·属于单字母简单替换密码

·明文语言集已知(用于英文字母)且易于识别

·结构过于简单,密码分析者只使用很少的信息就可预言加密的整个结构

正因为凯撒密码的上述特点,使得它非常容易破解,甚至无法抵抗唯密文攻击(如统计攻击)。但它作为加密算法的一个基础原理,可以衍生出多种变体,比如可以将字母表的顺序重排,允许密码表是明码表的任意一种重排,密钥就会增加到四千亿亿亿种。而且,它通常被作为其他更复杂加密算法中的一个步骤,如维吉尼亚密码。

上一篇:Java基础-四要素之一《抽象》(接口)


下一篇:ABP mysql