‘壹’ 。加密方法如下:将每个字母的序号移动3个位置,即“A"-”D”······“z”-“c”。
char str[]="......";
void jiami(char *s){
if(s){
while(*s){
if(*s>='a' && *s<='z'){*s+=3;if(*s>'z')*s-='z'-'c';}
if(*s>='A' && *s<='Z'){*s+=3;if(*s>'Z')*s-='z'-'c';}
s++;
}
}
}
void jiemi(char *s){
if(s){
while(*s){
if(*s>='a' && *s<='z'){*s-=3;if(*s<'a')*s-='c'-'z';}
if(*s>='A' && *s<='Z'){*s-=3;if(*s<'A')*s-='c'-'z';}
s++;
}
}
}
‘贰’ 关于加密的问题
对于加密,基本上不存在一个完全不可以被破解的加密算法,因为只要你有足够的时间,完全可以用穷举法来进行试探,如果说一个加密算法是牢固的,一般就是指在现有的计算条件下,需要花费相当长的时间才能够穷举成功(比如100年)。
一、主动攻击和被动攻击
数据在传输过程中或者在日常的工作中,如果没有密码的保护,很容易造成文件的泄密,造成比较严重的后果。一般来说,攻击分为主动攻击和被动攻击。
被动攻击指的是从传输信道上或者从磁盘介质上非法获取了信息,造成了信息的泄密。
主动攻击则要严重的多,不但获取了信息,而且还有可能对信息进行删除,篡改,危害后果及其严重。
二、对称加密
基于密钥的算法通常分为对称加密算法和非对称加密算法(公钥算法)。
对成加密算法就是加密用的密钥和解密用的密钥是相等的。比如着名的恺撒密码,其加密原理就是所有的字母向后移动三位,那么3就是这个算法的密钥,向右循环移位就是加密的算法。那么解密的密钥也是3,解密算法就是向左循环移动3位。
很显而易见的是,这种算法理解起来比较简单,容易实现,加密速度快,但是对称加密的安全性完全依赖于密钥,如果密钥丢失,那么整个加密就完全不起作用了。
比较着名的对称加密算法就是DES,其分组长度位64位,实际的密钥长度为56位,还有8位的校验码。DES算法由于其密钥较短,随着计算机速度的不断提高,使其使用穷举法进行破解成为可能。
三、非对称加密
非对称加密算法的核心就是加密密钥不等于解密密钥,且无法从任意一个密钥推导出另一个密钥,这样就大大加强了信息保护的力度,而且基于密钥对的原理很容易的实现数字签名和电子信封。
比较典型的非对称加密算法是RSA算法,它的数学原理是大素数的分解,密钥是成对出现的,一个为公钥,一个是私钥。公钥是公开的,可以用私钥去解公钥加密过的信息,也可以用公钥去解私钥加密过的信息。
比如A向B发送信息,由于B的公钥是公开的,那么A用B的公钥对信息进行加密,发送出去,因为只有B有对应的私钥,所以信息只能为B所读取。
牢固的RSA算法需要其密钥长度为1024位,加解密的速度比较慢是它的弱点。
另外一种比较典型的非对称加密算法是ECC算法,基于的数学原理是椭圆曲线离散对数系统,这种算法的标准我国尚未确定,但是其只需要192 bit 就可以实现牢固的加密。所以,应该是优于RSA算法的。
‘叁’ 经典密码的原理
经典密码大致上分为替代式密码和移位式密码,具体原理看下面加粗字体
凯撒密码是广为人知的替代式密码。为了用凯撒密码法加密讯息,每个密码字母集中的字母将会被其位置的后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。
对于密码破解者来说,应不能够找到关键,即使他知道明文和对应的密码文、即是他可以选择明文或密码文。经典密码再也不能满足这些强大的标准,因此,有兴趣者再也不拿它来做安全应用了。
以上内容参考网络-经典密码
‘肆’ 用c语言把字符串加密,包括字母和数字,向后偏移三位,需要运用到函数。帮忙改一下错啊。。
#include<stdio.h>
void sec(char str[]);
void main()
{
char str[10];
int i=0;
printf("input 10 chars:\n");
for(i=0;i<10;i++)
scanf("%c",&str[i]);//<————这里输入的时候你写的不对!
sec(str);
for(i=0;i<10;i++)
printf("%c",str[i]);
}
void sec(char str[])
{
int i;
for(i=0;str[i]!='\0';i++)
{
char x=str[i];
if((x>='a'&&x<='z')||(x>='A'&&x<='Z')||(x>='0'&&x<='9'))
x=x+3;
str[i]=x;//<————————这里要把转换完的x再赋给str[i]
}
}
‘伍’ 关于侦探的知识。。。恺撒移位密码是什么有谁知道吗
密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就可以破译。 现今又叫“移位密码”,只不过移动的为数不一定是3位而已。
密码术可以大致别分为两种,即易位和替换,当然也有两者结合的更复杂的方法。在易位中字母不变,位置改变;替换中字母改变,位置不变。
将替换密码用于军事用途的第一个文件记载是恺撒着的《高卢记》。恺撒描述了他如何将密信送到正处在被围困、濒临投降的西塞罗。其中罗马字母被替换成希腊字母使得敌人根本无法看懂信息。
苏托尼厄斯在公元二世纪写的《恺撒传》中对恺撒用过的其中一种替换密码作了详细的描写。恺撒只是简单地把信息中的每一个字母用字母表中的该字母后的第三个字母代替。这种密码替换通常叫做恺撒移位密码,或简单的说,恺撒密码。
尽管苏托尼厄斯仅提到三个位置的恺撒移位,但显然从1到25个位置的移位我们都可以使用, 因此,为了使密码有更高的安全性,单字母替换密码就出现了。
如:
明码表 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
密码表 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
明文 F O R E S T
密文 Y G K T L Z
只需重排密码表二十六个字母的顺序,允许密码表是明码表的任意一种重排,密钥就会增加到四千亿亿亿多种,我们就有超过4×1027种密码表。破解就变得很困难。
如何破解包括恺撒密码在内的单字母替换密码?
方法:字母频度分析
尽管我们不知道是谁发现了字母频度的差异可以用于破解密码。但是9世纪的科学家阿尔·金迪在《关于破译加密信息的手稿》对该技术做了最早的描述。
“如果我们知道一条加密信息所使用的语言,那么破译这条加密信息的方法就是找出同样的语言写的一篇其他文章,大约一页纸长,然后我们计算其中每个字母的出现频率。我们将频率最高的字母标为1号,频率排第2的标为2号,第三标为3号,依次类推,直到数完样品文章中所有字母。然后我们观察需要破译的密文,同样分类出所有的字母,找出频率最高的字母,并全部用样本文章中最高频率的字母替换。第二高频的字母用样本中2号代替,第三则用3号替换,直到密文中所有字母均已被样本中的字母替换。”
以英文为例,首先我们以一篇或几篇一定长度的普通文章,建立字母表中每个字母的频度表。
在分析密文中的字母频率,将其对照即可破解。
虽然设密者后来针对频率分析技术对以前的设密方法做了些改进,比如说引进空符号等,目的是为了打破正常的字母出现频率。但是小的改进已经无法掩盖单字母替换法的巨大缺陷了。到16世纪,最好的密码破译师已经能够破译当时大多数的加密信息。
局限性:
短文可能严重偏离标准频率,加入文章少于100个字母,那么对它的解密就会比较困难。
而且不是所有文章都适用标准频度:
1969年,法国作家乔治斯·佩雷克写了一部200页的小说《逃亡》,其中没有一个含有字母e的单词。更令人称奇的是英国小说家和拼论家吉尔伯特·阿代尔成功地将《逃亡》翻译成英文,而且其中也没有一个字母e。阿代尔将这部译着命名为《真空》。如果这本书用单密码表进行加密,那么频度分析破解它会受到很大的困难。
一套新的密码系统由维热纳尔(Blaise de Vigenere)于16世纪末确立。其密码不再用一个密码表来加密,而是使用了26个不同的密码表。这种密码表最大的优点在于能够克制频度分析,从而提供更好的安全保障。
“恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
假如有这样一条指令:
RETURN TO ROME
用恺撒密码加密后就成为:
UHWXUA WR URPH
如果这份指令被敌方截获,也将不会泄密,因为字面上看不出任何意义。
这种加密方法还可以依据移位的不同产生新的变化,如将每个字母左19位,就产生这样一个明密对照表:
明: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
密: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
在这个加密表下,明文与密文的对照关系就变成:
明文:THE FAULT, DEAR BRUTUS, LIES NOT IN OUR STARS BUT IN OURSELVES.
密文:MAX YTNEM, WXTK UKNMNL, EBXL GHM BG HNK LMTKL UNM BG HNKLXEOXL.
很明显,这种密码的密度是很低的,只需简单地统计字频就可以破译。于是人们在单一恺撒密码的基础上扩展出多表密码,称为“维吉尼亚”密码。它是由16世纪法国亨利三世王朝的布莱瑟·维吉尼亚发明的,其特点是将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
A 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
B 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 CC 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
D 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 E 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 F 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 G 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 H 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 I 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 J 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 K 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 L 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 M 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 N 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 O 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 P 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 Q 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 R 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 S 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 T 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 U 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 V 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
W 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 X 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 Y 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 Z 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
维吉尼亚密码引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密:
TO BE OR NOT TO BE THAT IS THE QUESTION
当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T的为K,依此类推,得出对应关系如下:
密钥:RELAT IONSR ELATI ONSRE LATIO NSREL
明文:TOBEO RNOTT OBETH ATIST HEQUE STION
密文:KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY
历史上以维吉尼亚密表为基础又演变出很多种加密方法,其基本元素无非是密表与密钥,并一直沿用到二战以后的初级电子密码机上。
‘陆’ 用Asc码加密,输入Hi ,用Asc码,向后移三个字母,输出Kl,怎么用C语言编程
#include<stdio.h>
#include<string.h>
voidmain()
{
printf("请输入字符串: ");
charinput[512]={0};
scanf("%s",input);
charoutput[512]={0};
for(inti=0;i<strlen(input);i++)
{
output[i]=input[i+3];
}
printf("%s ",output);
}
‘柒’ 密码那些事儿|(五)换个位置,面目全非
移位法和替代法大约5000年前出现,但直到9世纪才被阿拉伯人发明的频率分析法破解,中间隔了足足有4000年。在另一边的欧洲,实际上直到16世纪,都还没掌握这种破解方法。从这里我们也能感受到,阿拉伯文明曾经的辉煌。
移位法很简单。我举个例子,比如你的电话号码13911095871,把每个数字都在数列中往后加1,那么1变2,2变3,加密后就变成了24022106982。
13911095871叫做明文,24022106982则是它对应的密文。
字母的移位也是同样的道理,因为字母是遵循着abcdef……xyz的顺序排列,一共26个,看起来会比单纯的数字移位复杂一些,但本质上仍是一样的。
比如要对iron man加密,加密规则选择每个字母都向后移动3位, “iron man”就变成了“lurq pdq”。
没有经验的人乍看一下,完全就是乱码,实际上它只不过做了基础加密而已。这就是最基础的移位法。
大约在公元前700年左右,出现了用一种叫做Scytale的圆木棍来进行保密通信的方式。这种Scytale圆木棍也许是人类最早使用的文字加密解密工具,据说主要是古希腊城邦中的斯巴达人(Sparta)在使用它,所以又被叫做“斯巴达棒”。
相传雅典和斯巴达之间的伯罗奔尼撒战争中,斯巴达军队截获了一条写满杂乱无章的希腊字母的腰带,斯巴达将军在百思不得其解之际,胡乱将腰带缠到自己的宝剑上,从而误打误撞发现了其中隐藏的军机。这就是斯巴达密码棒的由来。
“斯巴达棒”的加密原理就是,把长带子状羊皮纸缠绕在圆木棍上,然后在上面写字;解下羊皮纸后,上面只有杂乱无章的字符,只有再次以同样的方式缠绕到同样粗细的棍子上,才能看出所写的内容。
比如像上图那样,在缠好的布带上写上“ YOU ARE IN DANGER”,然后再拆下来,布带上的文字顺序就变成了“YIONUDAARNEGER”,完全看不出任何头绪,这样就起到了加密的作用。
2100年前,古罗马的执政官和军队统帅恺撒(Julius Caesar,公元前100—前44)发明了一种把所有的字母按字母表顺序循环移位的文字加密方法。例如,当规定按字母表顺移3位的话,那么a就写成d,b写成e,c写成f,…,x写成a,y写成b,z写成c。单词Hello就写成了Khoor。如果不知道加密方法,谁也不会知道这个词的意思。解密时,只需把所有的字母逆移3位,就能读到正确的文本了。
上图就是根据恺撒加密法的原理而制作的字母循环移位盘。可以根据需要设定加密时移位的位数,以供加密或解密时快速查询。据说恺撒当年就是使用这种加密方法与手下的将军们通信的。
从密码学的角度来看,虽然恺撒加密法的规则很简单,然而,恺撒加密的思想对于西方古典密码学的发展有着很大影响。
事实上,直到第二次世界大战结束,西方所使用的加密方法原理大多与恺撒加密法类似,只是规则越来越复杂而已。
尽管移位法加密在西方得到了很普遍的应用,但在中国的史书上却很少记载,各位朋友可以想一想是为什么?
感兴趣的朋友们不妨在评论区一起聊一聊。
下一次,我们继续了解移位法和替代法的故事。
往期文章:
密码那些事儿|(四)隐藏的消息
密码那些事儿|(三)“风语者”——从未被破解的密码
密码那些事儿|(二)密码学发展的七个阶段
密码那些事儿|(一)无所不在的密码
本人是官方授权会员推广专员,点击 会员专属通道 成为会员,您将会获得钻奖励及诸多权益!
《钻奖励调整公告》
‘捌’ 用替代密码法的单子母加密方法,使原来的字符向后移三位加密下面的句子: NO pains no gai
no pains no gain
囧,是这个意思吗?
qr sdmqv qr kdmq
‘玖’ 头脑风暴——古罗马密码
这个有个提示:前进3步 所以就应该向前推算,那就是说停止运输或停止交通咯 !密函VWRS WUDIILF
大概意思就是stop traffic 把 密码学还在学习中
其实直接用恺撒密码也能解把 恺撒密码是替代密码,通过将字母按顺序推后起3位起到加密作用 所以v向前推3位就是s 以此类推 就是stop traffic 哇撒我好聪明哦 猜也能猜到