凯撒密码为什么只有25个密钥(凯撒密码对应表2)

2023-03-02 17:29:34 摩斯密码知识 思思

凯撒密码

我觉得创建26个文件实在太冗杂了。其实一个就够了,因为随着你的选择的改变(比如以9为加密条件,所有字母循环后移9位),目标文件里面的内容就自动更新了。

当然你也可以使用函数 int create(char *filename , int mode) 在执行框里手动输入像 e:\\original.txt 这样的地址字符,但你想象一下,这是不是很麻烦?

在实际加密中,可使用随机函数 rand()产生循环后移位数,而且完全可以不限制在26位,扩展ASCII码可以产生成千上万的字符,将文件加密到那些几乎无规律,难以识别的字符上,安全性就提高了许多。当然还有什么多轮加密之类的。可以自己慢慢摸索,挺有趣的。祝你好运!

修改如下(已成功执行):

#includestdio.h

#includestdlib.h

char encrypt(char ch,int n)/*加密函数,把字符向右循环移位n*/

{

while(ch='A'ch='Z')

{

return ('A'+(ch-'A'+n)%26);

}

while(ch='a'ch='z')

{

return ('a'+(ch-'a'+n)%26);

}

return ch;

}

void main()

{

FILE *in,*out;

char ch1,ch2;

int i;

printf("Please input the number(1~26) you want to use for encrypt:");

scanf("%d",i);

if((in=fopen("e:\\original.txt","r"))==NULL) /*文件名根据自己建立的位置修改,

我建在e盘的根目录下

{

printf("Can not open this file!\n");

exit(0);

}

if((out=fopen("e:\\encrypt.txt","w"))==NULL) //同上

{

printf("Can not open this file!\n");

exit(0);

}

while(!feof(in)){

if((ch1=fgetc(in))!=EOF)

ch2=encrypt(ch1,i);

fputc(ch2,out);

}

printf("Encrypt is over!\n");

fclose(in);

fclose(out);

}

凯撒密码为什么只有25个密钥(凯撒密码对应表2) 第1张

凯撒加密算法(最简单的对称加密)

凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。

因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥。

该程序既可用于加密又可用于解密。只要传入明文和偏移量即可加密,解密需要传入密文和负的偏移量就可以解密。

输出的结果:

凯撒密码由于加解密比较简单,密钥总共只有 26 个,攻击者得到密文后即使不知道密钥,也可一个一个地试过去,最多试 26 次就可以得到明文。

这里不光根据 offset 偏移进行加密,还加上了字符所在的下标进行混合加密。

输出的结果:

谁知道怎么解凯撒等类型的密码?有什么技巧?

凯撒密码很简单,其实就是单字母替换。我们看一个简单的例子:

明文:a b c d e f g h i j k l m n o p

密文:d e f g h i j k l m n o p q r s

若明文为student,对应的密文则为vwxghqw。在这个一一对应的算法中,凯撒密码将字母表用一种顺序替代的方法来进行加密,此时密钥为3,就是每个字母顺序推后3位。由于应为字母为26个,因此凯撒仅有26个可能的密钥,非常不安全。

类似的算法就是使替代不是有规律的,而是随机生成的一个对照表。比如置换移位算法里的维吉尼亚密码。

说明:凯撒密码中的英文字母的移位以及25位循环的原理,初学密码学有些不明白为什么4段单词可推出6段的密文

凯撒密码不是需要数字密匙吗?你可以把维纳热尔方阵列出来看看,有第26行的 。

例如:phhw ph diwhu wkh wrjd sduwb 得出:meet me after the toga party

这个密文是倒数3位字母

密码学 - 古典加密

信息理论之父:克劳德 香农

论文《通信的数学理论》

如果没有信息加密,信息直接被中间人拦截查看、修改。

明文Plain text

密文Cipher text

加密Encryption/Encrypherment:将明文转化为密文

解密Decrytion/Decipherment:讲密文还原为明文

加密钥匙EK Encryption Key:加密时配合加密算法的数据

解密钥匙EK Encryption Key:解密时配合解密算法的数据

各个字符按照顺序进行n个字符错位的加密方法。

(凯撒是古罗马军事家政治家)

多次使用恺撒密码来加密并不能获得更大的安全性,因为使用偏移量A加密得到的结果再用偏移量B加密,等同于使用A+B的偏移量进行加密的结果。

凯撒密码最多只有25个密匙 +1到+25 安全强度几乎为0

(密钥为0或26时,明文在加密前后内容不变)

暴力枚举

根据密文,暴力列出25个密匙解密后的结果。

凯撒密码的例子是所有 单字母替代式密码 的典范,它只使用一个密码字母集。

我们也可以使用多字母替代式密码,使用的是多个密码字母集。

加密由两组或多组 密码字母集 组成,加密者可自由的选择然后用交替的密码字母集加密讯息。

(增加了解码的困难度,因为密码破解者必须找出这两组密码字母集)

另一个多字母替代式密码的例子“维吉尼亚密码”,将更难解密

(法语:Vigenère cypher),

它有26组不同用来加密的密码字母集。

每个密码字母集就是多移了一位的凯撒密码。

维吉尼亚方格(替换对照表):

维吉尼亚密码引入了密匙概念。

同一明文在密文中的每个对应,可能都不一样。

移位式密码,明文中出现的字母依然出现在密文中,只有字母顺序是依照一个定义明确的计划改变。

许多移位式密码是基于几何而设计的。一个简单的加密(也易被破解),可以将字母向右移1位。

例如,明文"Hello my name is Alice."

将变成"olleH ym eman si ecilA."

密码棒(英语:scytale)也是一种运用移位方法工具。

明文分组,按字符长度来分,每5个字母分一组。

并将各组内的字符的顺序进行替换。

具体例子

纵栏式移项密码

先选择一个关键字,把原来的讯息由左而右、由上而下依照关键字长度转写成长方形。接着把关键字的字母依照字母集顺序编号,例如A就是1、B就是2、C就是3等。例如,关键字是CAT,明文是THE SKY IS BLUE,则讯息应该转换成这样:

C A T

3 1 20

T H E

S K Y

I S B

L U E

最后把讯息以行为单位,依照编号大小调换位置。呈现的应该是A行为第一行、C行为第二行、T行为第三行。然后就可以把讯息"The sky is blue"转写成HKSUTSILEYBE。

另一种移位式密码是中国式密码(英语:Chinese cipher),移位的方法是将讯息的字母加密成由右而左、上下交替便成不规则的字母。范例,如果明文是:THE DOG RAN FAR,则中国式密码看起来像这样:

R R G T

A A O H

F N D E

密码文将写成:RRGT AAOH FNDE

绝大多数的移位式密码与这两个范例相类似,通常会重新排列字母的行或列,然后有系统的移动字母。其它一些例子包括Vertical Parallel和双移位式(英语:Double Transposition)密码。

更复杂的算法可以混合替代和移位成为积密码(product cipher);现代资料区段密码像是DES反复位移和替代的几个步骤。

行数=栏数

明文,分为N栏(N行) 按照明文本来的顺序,竖着从上往下填。

【实例1】

明文123456

栏数2(行数2)

密文135246

135

246

拆成2行(2栏),竖着看密文——得到明文

【实例2】明文123456789abcdefghi 栏数9 (行数)---密文1a2b3c4d5e6f7g8h9i

拆成9行竖着看密文.

1a

2b

3c

4d

5e

6f

7g

8h

9i

古典密码【栅栏密码安全度极低】组成栅栏的字母一般一两句话,30个字母。不会太多! 加解密都麻烦

是指研究字母或者字母组合在文本中出现的频率。应用频率分析可以破解古典密码。

工具

在线词频分析

维吉尼亚密码

      维吉尼亚密码是以法国外交官、密码学家布莱斯·德·维吉尼亚的名字命名的,不过不是他本人发明的。

【加密原理】

      维吉尼亚密码是在凯撒密码的基础上产生的一种加密方法,它将凯撒密码的全部25种位移排序为一张表,与原字母序列共同组成26行26列的密码表。

      除了密码表,还必须有一个密钥。密钥由字母组成,最少一个字母,最多可与明文字母数相等。如果密钥只有1个字母,相当于就是凯撒密码。举个例子:

明文:I Love You

密钥:OK

      首先,密钥长度需要与明文长度相同,如果少于明文长度,则重复拼接直到长度相等。本例中,明文长度为8个字母(非字母忽略),密钥补全为“OKOKOKOK”。

      然后根据密码表进行加密。明文第一个字母是“I”,密钥第一个字母是“O”,在表格中找到“I”列与“O”行的相交点,字母“W”就是密文的第一个字母。同理,“L”列与“K”行交点字母是“V”。“O”列与“O”行交点字母是“C”……以此类推,得到密文: W VCFS ICE。

【解密原理】

密文:PWZRNZBZ EA NQKBUHN LNB

密钥:wind

      首先把密钥重复拼接到和密文长度相同,上例中密文为20位字母,密钥拼接后为:windwindwindwindwind。

      密文P对应密钥W,在密码表中找出W行为P的列,沿着这一列向上找到最上面的字母是T。以此类推,得到明文:tomorrow is another day。