所谓加密算法就是指将信息变成密文的计算方法。有的加密算法就是对信息进行简单的替换或乱序这种加密算法最明显的缺陷就是算法本身必须保证是安全的现代加密算法通常都需要密钥来完成对信息的加密运算,算法本身可以公开理论上只要保证密钥的安全就能保证信息的安全。
最早的恺撒密文就是一种简单的字母替换加密算法算法本身非常简单但同时也是最容易破解的算法其加密方式就是按照其在英文字母表里的顺序将字母循环移位整个算法可归结为下面的公式
f(x)
=
(
x
+
s
)
mod
26
其中x是原文字母s是一个常数例如如果s等于3则字母a就被加密为d,而字母z就被加密为c
这种加密方法虽然简单但是缺点也是显而易见的比如明文中字母c出现的次数是5次的话则加密后对应的字母出现的次数也是5次也就是说字母出现的频率没有变化。比如e是英文中最常用的字母那么给定一个足够大的密文该文中出现,最多的字母很可能就是e。如果不是那可能是a、i或q。密码学专家只用十几个密码字母就能很快的进行这种统计攻击。现代加密算法与这种简单的字母替换算法不同的地方在于加密算法的安全性基于用于加密的密钥而不是算法本身对于好的加密算法即使公开其算法设计原理也不会对其安全性产生丝毫的影响只要用于加密的密钥是安全的则被加密的信息也就是安全的
㈡ 恺撒移位密码,将字母顺序后移5位的时候: 明文 F O R E S T 密文 K T W J X Y
如果你问的是电报码,那就还有中文电码,即用四个数字的组合代表汉字,一种无理码,差不多除了死记外无规律可循,现在基本不同了。
其实,如果是电报码,有一种就够了,何必再去发明呢?
如果您问的是密码,介绍几种常见密码形式:
1、栅栏易位法。
即把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边,从而形成一段密码。
举例:盗用阿洗一个例子^^
TEOGSDYUTAENNHLNETAMSHVAED
解:
将字母分截开排成两行,如下
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再将第二行字母分别放入第一行中,得到以下结果
THE LONGEST DAY MUST HAVE AN END.
2、恺撒移位密码。
也就是一种最简单的错位法,将字母表前移或者后错几位,例如:
明码表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密码表:DEFGHIJKLMNOPQRSTUVWXYZABC
这就形成了一个简单的密码表,如果我想写frzy(即明文),那么对照上面密码表编成密码也就是iucb(即密文)了。密码表可以自己选择移几位,移动的位数也就是密钥。
3、进制转换密码。
比如给你一堆数字,乍一看头晕晕的,你可以观察数字的规律,将其转换为10进制数字,然后按照每个数字在字母表中的排列顺序,拼出正确字母。
举例:110 10010 11010 11001
解:
很明显,这些数字都是由1和0组成,那么你很快联想到什么?二进制数,是不是?嗯,那么就试着把这些数字转换成十进制试试,得到数字6 18 26 25,对应字母表,破解出明文为frzy,呵呵~
4、字母频率密码。
关于词频问题的密码,我在这里提供英文字母的出现频率给大家,其中数字全部是出现的百分比:
a 8.2 b 1.5 c 2.8 d 4.3
e 12.7 f 2.2 g 2.0 h 6.1
i 7.0 j 0.2 k 0.8 l 4.0
m 2.4 n 6.7 o 7.5 p 1.9
q 0.1 r 6.0 s 6.3 t 9.1
u 2.8 v 1.0 w 2.4 x 0.2
y 2.0 z 0.1
词频法其实就是计算各个字母在文章中的出现频率,然后大概猜测出明码表,最后验证自己的推算是否正确。这种方法由于要统计字母出现频率,需要花费时间较长,本人在此不举例和出题了,有兴趣的话,参考《跳舞的小人》和《金甲虫》。
5、维热纳尔方阵。
上面所说的频率分析,很容易破解较长篇幅的密文,于是维热纳尔继承前人的经验,创造出了这个维热纳尔方阵,从而克服了词频分析轻易能够破解密码的弊端,成为一种较为强大的密码编译形式。
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
1 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 A
2 C 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
3 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
4 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 D
5 F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
6 G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
7 H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
8 I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
9 J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
10 K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
11 L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
12 M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
13 N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
14 O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
15 P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
16 Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
17 R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
18 S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
19 T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
20 U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
21 V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
22 W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
23 X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
24 Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
25 Z 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
26 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
以上就是维热纳尔方阵,它由明码表(第一行的字母)、密码表(下面26行)和密钥组成,下面我举个例子说明。
举例:
密钥:frzy
密码:qfuc
解:第一个字母,看以f开头第五行,对应明码表查找q字母所标示的字母为l。以此类推找出后面字母。所得明文为love。
一些新兴的密码形式:
1、利用键盘
无论是计算机键盘,还是手机键盘,都是出密码的好工具哦,可以用错位、或者排列形状等。使用手机键盘和这个同理。另外手机键盘还可以在键盘的字母上做文章,例如你可以用51表示字母j,用73表示字母r等。
举例:
r4a6
这个密码利用计算机键盘,将明文字母分别向上移动一个位置,得到密文。破解结果为frzy。
852 74123 74123698 74269 78974123456 7412369
这排数字是不是很晕?其实很简单,对照小键盘,依次打这些字母,看组成的形状就行了。答案是I L O V E U。
2、字母形状
本人曾经收到过这样一个密码短信,不幸被破解,导致发短信人被我非常严肃地奚落了一番^^!前面我不记得了,只记得后面是hep poo6。这个你可以从手机里打出来,然后把手机倒过来看,形成了密码的明文,good day~~~:)
20回答者: caibird1122 - 四级 2008-11-10 19:23
㈢ 电文加密算法:输入一个小写字母,将字母循环后移5个位置后输出。从键盘输入一电文密码,输入其相应的密码
char jiami(char ch)
{
/* 加密小写字符,其他字符不管 */
if(ch>='a' && ch<='z')
return ('a' + (ch-'a'+5) % 26);
else
return ch;
}
㈣ java 字母移位加密
public String(char[] value)
分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。该字符数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。
toCharArray
public char[] toCharArray()
将此字符串转换为一个新的字符数组。
㈤ 说明:凯撒密码中的英文字母的移位以及25位循环的原理,初学密码学有些不明白为什么4段单词可推出6段的密文
凯撒密码不是需要数字密匙吗?你可以把维纳热尔方阵列出来看看,有第26行的 。
例如:phhw ph diwhu wkh wrjd swb 得出:meet me after the toga party
这个密文是倒数3位字母
㈥ 设密文为love,试利通用凯撒密码(k=3)对其解密,得出明文
1、首先通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后按照一个固定数目进行偏移后被替换成密文。
㈦ C语言凯撒加密是一种移位替代加密算法,即将字母表A-Z向左移位,然后用移位后的字母表替原来的明文得到密文
#include<iostream>
#include<string>
usingnamespacestd;
intmain()
{
stringcode;//储存初始字符串
stringd_code;//加密后的字符串
inti;
intn;//移位的个数
cout<<"Enterthestring"<<endl;
cin>>code;
cout<<"howmanystepdoyouwanttomove?"<<endl;
cin>>n;
for(i=0;i<code.size();++i)
{
if(int(code[i])>97)
{
if(int(code[i])+n>122)
d_code[i]=int(code[i])+n-26;
else
d_code[i]=int(code[i])+n;
}
elseif(int(code[i])+n>90)
d_code[i]=char(int(code[i])+n-26);
else
d_code[i]=char(int(code[i]+n));
}
for(i=0;i<code.size();++i)
{
cout<<d_code[i];
}
cout<<endl;
cout<<"Code="<<code<<endl;
return0;
}
㈧ C++字母移位加密代码。解释一下主函数里面每行语句的意思。
我的分析如下,希望能帮到你: char a[]={"book"}; //把待加密的字母保存到数组a中
n=sizeof(a)-1; //取得待加密的字母个数
for (int i=0;i<n;i++) {
a[i]=a[i]+5; //用for循环使得a数组中每个字母分别加5,并分别保存到a数组中
cout<<a[i]; //输出加密后的字母
}
int b;cin>>b; //这个是获取一个输入,估计这是起到暂停作用。
}
㈨ 位加密(或移位加密)代码怎么样写
char getkey(char txt) { char e = "dfwkekgodsfdfwkdsf";//一定位数的字符串,比如32位 int ctr=0; char tmp = ''; for (int i=0;i<strlen(txt);i++) { if (ctr == strlen(e)) ctr=0;//当ctr长度为上面 e 的长度时,重新置为0 tmp += substr(txt,i,i+1) ^ substr(e,ctr,ctr+1);//将 txt的第i个字符 与 e 的第 ctr个字符 异或运算 并添加入 tmp字串中 ctr++;// ctr 自增 } return tmp;//返回得到的tmp字串 } char encrypt(txt) { srand((double)microtime()*1000000);//设置时间种子 char encrypt_key = md5(rand(0,32000));//得到32为加密字串; 这里目的就是每次运行时得到的字串都不一样 int ctr=0; int tmp = ""; for (int i=0;i<strlen(txt);i++) { if (ctr==strlen(encrypt_key)) ctr=0; tmp += substr(encrypt_key,ctr,ctr+1) . (substr(txt,i,i+1) ^ substr(encrypt_key,ctr,ctr+1)); ctr++; } return getkey(tmp); } char decrypt(txt) { char txt = getkey(txt); char tmp = ""; for (int i=0;i<strlen(txt);i++) { md5st = substr(txt,i,i+1); i++; tmp += (substr(txt,i,i+1) ^ md5st); } return tmp; }
㈩ 达芬奇密码j mpwf zpv
这是经过字母移位的加密算法得到的密文。
明文:I love you
加密算法:每个字母向后一字母变换,如a变成b,b变成c,c变成d……z变成a。
密文:j mpwf zpv
PS,如果《达芬奇密码》没有,那么我没记错的话就是出自他的《数字城堡》