凯撒密码加密过程代码运行原理的简单介绍

2023-02-10 22:28:46 密码用途 思思

经典密码的原理

经典密码大致上分为替代式密码和移位式密码,具体原理看下面加粗字体

凯撒密码是广为人知的替代式密码。为了用凯撒密码法加密讯息,每个密码字母集中的字母将会被其位置的后3个字母替代。因此字母A将会被字母D替代、字母B将会被字母E替代、字母C将会被字母F替代等,最后,X、Y和Z将分别的被替代成A、B和C。

例如,"WIKIPEDIA"将被加密成"ZLNLSHGLD"。凯撒把字母向后移"3"位,但其他数字也可照著作。

另一种替代式密码是使用关键字,你可以选择一个单字或是短词组并去除所有的空格和重复的字母,接着把它当作密码字母集的开头。最后记得去除掉关键字的字母把其它字母接续排序。

移位式密码,它们字母本身不变,但它们在讯息中顺序是依照一个定义明确的计划改变。许多移位式密码是基于几何而设计的。一个简单的加密(也易被破解),可以将字母向右移1位。

例如,明文"Hello my name is Alice."将变成"olleH ym eman si ecilA."。密码棒(scytale)也是一种运用移位方法工具。

一个移位式密码的具体例子columnar cipher.先选择一个关键字,把原来的讯息由左而右、由上而下依照关键字长度转写成长方形。接着把关键字的字母依照字母集顺序编号,例如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。

经典密码的破译

经典密码由于规律性很强,通常很容易被破解。许多经典密码可单单经由密文而破解,所以它们容易受到唯密文攻击法攻击(ciphertext-only attack)。

有些经典密码(像是凯撒密码)的金钥个数有限,所以这类密码可以使用暴力破解尝试所有的金钥。替代式密码有比较大的金钥数,但是容易被频率分析,因为每个密码字母各代表了一个明文字母。

另一方面,现代密码的设计可以承受更强大的ciphertext-only attacks。一个优秀的现代密码必须保证广泛潜在的攻击,包括known-plaintext attack和chosen-plaintext attack以及chosen-ciphertext attack。

对于密码破解者来说,应不能够找到关键,即使他知道明文和对应的密码文、即是他可以选择明文或密码文。经典密码再也不能满足这些强大的标准,因此,有兴趣者再也不拿它来做安全应用了。

以上内容参考 百度百科-经典密码

凯撒密码加密过程代码运行原理的简单介绍 第1张

求python中的恺撒密码的加密,解密,以及破解的程序

凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。

如下代码是以偏移量为13展开计算的。123

源代码如下:

sr1="abcdefghijklmnopqrstuvwxyz"sr2=sr1.upper()

sr=sr1+sr1+sr2+sr2

st="The Zen of Python"sResult=""for j in st: if j==" ":

sResult = sResult +" "

continue

i=sr.find(j) if(i-1):

sResult=sResult+sr[i+13]print sResult12345678910111213

运行结果为:

Gur Mra bs Clguba

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

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

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

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

输出的结果:

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

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

输出的结果:

凯撒密码的原理是什么?

根据苏维托尼乌斯的记载,恺撒曾用此方法对重要的军事信息进行加密: 如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第4个字母置换第一个字母,即以D代A,余此类推。

同样,奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回。每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;用A代表Z。

扩展资料:

密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就可以破译。 现今又叫“移位密码”,只不过移动的为数不一定是3位而已。

参考资料来源:百度百科-凯撒密码

谁懂计算机的凯撒码 我想知道怎么代换

这里有方法,自己看吧,比较多,呵呵

[凯撒介绍]

凯撒密码(kaiser)是罗马扩张时期朱利斯"凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。

[加密原理]

凯撒密码的加密算法极其简单。其加密过程如下:

在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换:

c≡m+k mod n (其中n为基本字符个数)

同样,解密过程可表示为:

m≡c+k mod n (其中n为基本字符个数)

对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。

[加密算法]

我们预定义基本字符个数为 #define MAX 128

凯撒加密函数可以表示为

[Copy to clipboard]

CODE:

char cipher(char plain_char, int key)

{

return (plain_char + key) % MAX;

};

凯撒解密函数:

[Copy to clipboard]

CODE:

char decipher(char cipher_char, int key)

{

return (cipher_char - key + MAX) % MAX;

};

加密后,原所有的ASCII码偏移key位,解密则移回key位。

如果要对一个文本文件进行加密,则只要依次逐个字符逐个字符地读取文本文件,进行加密后,逐个字符逐个字符写入密文文本文件中,即可:

[Copy to clipboard]

CODE:

FILE *fp_plaintext;

FILE *fp_ciphertext;

char plain_char;

... ...

while((plain_char=fgetc(fp_plaintext))!=EOF)

{

fputc(cipher(plain_char,key),fp_ciphertext);

}

对文件的解密也同样方法。

[破解原理]

一篇包含字符的英文文章,其各ASCII码字符出现,都有一定的频率,下面是对Google上随意搜索到的英文文章进行分析的结果,见表:

QUOTE:

=================================================

FileName : 01.txt

[1] 32: times:204

[2] 101:e times:134

[3] 116:t times:91

[4] 105:i times:87

[5] 111:o times:77

[6] 108:l times:75

[7] 97:a times:75

[8] 110:n times:69

[9] 10:

times:67

[10] 115:s times:63

=================================================

FileName : php.si.source.txt

[1] 32: times:576

[2] 101:e times:162

[3] 115:s times:153

[4] 110:n times:141

[5] 114:r times:138

[6] 105:i times:135

[7] 10:

times:134

[8] 116:t times:129

[9] 42:* times:116

[10] 111:o times:103

=================================================

FileName : work.txt

[1] 32: times:51322

[2] 101:e times:30657

[3] 116:t times:23685

[4] 97:a times:19038

[5] 111:o times:17886

[6] 105:i times:16156

[7] 110:n times:15633

[8] 114:r times:15317

[9] 115:s times:15226

[10] 104:h times:12191

=================================================

FileName : 02.txt

[1] 32: times:299

[2] 101:e times:217

[3] 110:n times:136

[4] 105:i times:133

[5] 111:o times:124

[6] 116:t times:116

[7] 97:a times:110

[8] 115:s times:98

[9] 114:r times:92

[10] 108:l times:82

=================================================

FileName : 03.txt

[1] 45:- times:404

[2] 32: times:394

[3] 101:e times:237

[4] 116:t times:196

[5] 114:r times:173

[6] 97:a times:163

[7] 105:i times:161

[8] 110:n times:153

[9] 111:o times:142

[10] 115:s times:129

=================================================

FileName : 04.txt

[1] 32: times:326

[2] 101:e times:179

[3] 116:t times:106

[4] 105:i times:101

[5] 111:o times:96

[6] 110:n times:94

[7] 97:a times:92

[8] 115:s times:78

[9] 100:d times:61

[10] 114:r times:60

=================================================

FileName : 05.txt

[1] 32: times:441

[2] 101:e times:191

[3] 111:o times:151

[4] 116:t times:120

[5] 97:a times:112

[6] 110:n times:108

[7] 105:i times:91

[8] 114:r times:84

[9] 117:u times:79

[10] 115:s times:79

有此分析可知,一篇英文文章中,出现较高频率的两个字符是 ' ' (空格) 和 'e',而且它们的ASCII码分别是32和101,差值是69。

既然凯撒密码利用的是单表替换的一种简单加密算法,所以,我们的主角, ' ' 和 'e' ,在解密后,依然会保持相同的ASCII码差值,69。

|c1 - c2| = |'e' - ' '| = |101 - 32| = 69

|m1 - m2| = | ((c1 + k) mod 256)-((c2 + k) mod 256)| = |c1 - c2| = |'e' - ' '| = 69

现在可以得到破解凯撒密码的原理了,我们统计一片经过凯撒加密的密文字符信息,在出现频率较高的字符里面寻找差值是69的2个字符,这两个必定是 ' ' 和 'e' 字符的加密字符,计算偏移量(既密钥key),通过解密运算,还原出明文。

[破解算法]

任何一片英文加密后的密文,我们统计出所有字符的个数:

[Copy to clipboard]

CODE:

#define MAX 128

... ...

FILE *fp_ciphertext;

char cipher_char;

int i; //密文文件长度,包含多少字符

unsigned int size_file=0; //申明num数组,存储各个ASCII字符在密文中出现的个数

num[MAX];

... ...

for(i = 0;i MAX; i++) //初始化num数组中的值

num[i] = 0;

... ...

while((cipher_char=fgetc(fp_ciphertext))!=EOF)

{

num[cipher_char]++;

size_file++;

}

统计出现最多次数的字符,定义#define GETTOP 10,统计最多的前10位字符:

[Copy to clipboard]

CODE:

//统计前10位

#define GETTOP 10

... ...

int temp,i,j;

int maxascii[GETNUM]; //申明maxascii数组,存储统计出的概率前10位的字符ascii码

int maxtimes[GETNUM]; //申明maxtimes数组,存储统计出的概率前10位的字符的出现次数

... ...

for(i=0;iGETTOP;i++)

{

temp=0; //临时变量temp里面来存储出现最多次数的字符的ascii码

for(j=1;jMAX;j++) //依次比较所有的字符次数,获得最多字符的ascii码

{

if(num[j]=num[temp])

temp=j;

}

maxascii[i]=temp; //把出现最多次数字符的ascii存储到相应的maxascii数组中

maxtimes[i]=num[temp]; //把最多次数字符的出现次数存储到相应的maxtimes数组中

num[temp]=0; //把最多次数字符的次数赋值成0,

//进行循环运算,同样的算法,第二次循环得到的值,肯定是出现第二多的字符

//避免了对256或128个字符进行排序的复杂运算

//当年我用汇编编写成绩排序的程序时,也用这套排序算法:-)

}

找出出现最多字符中,ASCII码差别是69的两个字符,计算出密钥key的长度:

[Copy to clipboard]

CODE:

for(i=0;iGETTOP;i++)

{

for(j=0;jGETTOP;j++)

{

if((max[i]-max[j])==69)

{

key=(max[j] - 32 + MAX ) % MAX;

printf("Key : %d\n",key);

break;

}

}

}

既然得到了密钥长度,算完成了对凯撒密码的破解了,那就进行解密吧,大功告成!

凯撒密码的算法c语言的怎么实现啊?

凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全。他的原理很简单,说到底就是字母于字母之间的替换。下面让我们看一个简单的例子:“baidu”用凯撒密码法加密后字符串变为“edlgx”,它的原理是什么呢?把“baidu”中的每一个字母按字母表顺序向后移3位,所得的结果就是刚才我们所看到的密文。

#include stdio.h

main()

{

char M[100];

char C[100];

int K=3,i;

printf("请输入明文M(注意不要输入空白串)\n");

gets(M);

for(i=0;M[i]!='\0';i++)

C[i]=(M[i]-'a'+K)%26+'a';

C[i]='\0';

printf("结果是:\n%s\n",C);

}