Ⅰ 加密处理程序,从键盘输入一段英文文字,将其中每个字母用其后的第四个字母代替,最后的字母循环到前面的
有3个大问题:1. main里调用的那两个函数不应该在写成声明的句子.
2. str[i]=str[i]+'4';和+'22'还有减的那两句,应该是数字不应该是带引号的字符
3. 在那两个函数里的循环里应该加上结束符判断,打印字符的参数不应该是str[100]
还有scanf("%s",&str[100]);改成scanf("%s",str);
Ⅱ 这是什么算法我知道加密密码和原密码
所谓加密算法就是指将信息变成密文的计算方法。有的加密算法就是对信息进行简单的替换或乱序这种加密算法最明显的缺陷就是算法本身必须保证是安全的现代加密算法通常都需要密钥来完成对信息的加密运算,算法本身可以公开理论上只要保证密钥的安全就能保证信息的安全。
最早的恺撒密文就是一种简单的字母替换加密算法算法本身非常简单但同时也是最容易破解的算法其加密方式就是按照其在英文字母表里的顺序将字母循环移位整个算法可归结为下面的公式
f(x)
=
(
x
+
s
)
mod
26
其中x是原文字母s是一个常数例如如果s等于3则字母a就被加密为d,而字母z就被加密为c
这种加密方法虽然简单但是缺点也是显而易见的比如明文中字母c出现的次数是5次的话则加密后对应的字母出现的次数也是5次也就是说字母出现的频率没有变化。比如e是英文中最常用的字母那么给定一个足够大的密文该文中出现,最多的字母很可能就是e。如果不是那可能是a、i或q。密码学专家只用十几个密码字母就能很快的进行这种统计攻击。现代加密算法与这种简单的字母替换算法不同的地方在于加密算法的安全性基于用于加密的密钥而不是算法本身对于好的加密算法即使公开其算法设计原理也不会对其安全性产生丝毫的影响只要用于加密的密钥是安全的则被加密的信息也就是安全的
Ⅲ 电文加密算法:输入一个小写字母,将字母循环后移5个位置后输出。从键盘输入一电文密码,输入其相应的密码
char jiami(char ch)
{
/* 加密小写字符,其他字符不管 */
if(ch>='a' && ch<='z')
return ('a' + (ch-'a'+5) % 26);
else
return ch;
}
Ⅳ 有种古典加密方法就是按照字母表顺序,把每个字母循环右移k位,从而转换为加密的另一个字母。
#include<stdio.h>
#include<math.h>
intmain()
{
intk;
inti;
chara[100];
printf("输入k:");
scanf("%d",&k);
printf("输入一段英文:");
getchar();
gets(a);
for(i=0;a[i];i++)
{
if(a[i]<='Z'&&a[i]>='A')
a[i]=(a[i]+k-'A')%26+'A';
else if(a[i]<='z'&&a[i]>='a')
a[i]=(a[i]+k-'a')%26+'a';
}
printf("加密后:");
puts(a);
return0;
}
Ⅳ 加密密钥和加密算法有什么区别
密钥和加密算法的区别:
1.
密钥是一种参数(它是在明文转换为密文或将密文转换为明文的算法中输入的数据);
2.
加密算法是明文转换成密文的变换函数...是算法;
3.
同样的密钥可以用不同的加密算法呀,得到的密文就不一样了。
举个很简单的例子,比如凯撒密码,就是将字母循环后移n位,这个n就是一个密钥,循环后移的方法叫做算法,对明文用不同的密钥加密的结果不一样,虽然他们用的是相同的算法。
比如run用key=1(密钥)的凯撒密码,变成svo,用key=2(密钥)加密就成了twp,所以密钥和算法是明显不同的,再比如现在公钥密码体系大多用的rsa算法,但每个人的密钥不一样,密文才不同。
另外,一般来说,算法是公开的,而密钥是不公开的。
Ⅵ 电文加密算法:输入一个小写字母,将字母循环后移5个位置后输出。从键盘输入一电文密码,输入其相应的密码
Dim s As String:s = inputbox("请输入一个小写字母")
Msgbox "密码为:" & Chr(((Asc(s) - 97 + 5) Mod 26) + 97)
Ⅶ 密钥和加密算法是个什么关系
密钥是一种参数(它是在明文转换为密文或将密文转换为明文的算法中输入的数据),加密算法是明文转换成密文的变换函数,同样的密钥可以用不同的加密算法,得到的密文就不一样了。
举一个示例,例如凯撒密码,该字母向后旋转n位,该n是密钥, 向后移动的方法称为算法。 尽管使用相同的算法,但是对明文用不同的密钥加密的结果不一样。
例如,Run使用Key = 1(密钥)的凯撒密码,即Svo,而Key = 2(密钥)的加密,则成为Twp,因此密钥和算法存在很大差异。
现在大多数公钥密码系统都使用RSA算法,但是每个人的密钥的密文不同。 通常,该算法是公共的,密钥不是公共的。 加密算法恰好包含两个输入参数,一个是明文,另一个是密钥。
(7)加密算法字母循环扩展阅读:
1、密钥算法
使用极其复杂的加密算法,即使解密者可以加密他选择的任意数量的明文,也无法找出破译密文的方法。 秘密密钥的一个弱点是解密密钥必须与加密密码相同,这引发了如何安全分配密钥的问题。
2、公钥算法
满足三个条件:第一个条件是指在对密文应用解密算法后可以获得明文。 第二个条件是指不可能从密文中得出解密算法。 第三个条件是指即使任何明文形式的选择都无法解密密码,解密程序也可以加密。 如果满足上述条件,则可以公开加密算法。
Ⅷ 用C语言实现任意字符串的加密,其中,字母用凯撒加密方法加密,非字母不变
我尽量用注释阐述了思路,希望可以帮到你!!
#include<stdio.h>
#include<string.h>
#define N 80 //可加密字符串最大长度
char plaintext[N]={0}; //明文,输入时输入字符,参与运算时强制转换成整数
int ciphertext[N]={0}; //密文,保存成整数,输出时强制转换成字符
int k; //后(右)移位数,相当于密钥
void getPlainText() //获得明文字符串
{
printf("请输入明文:");
scanf("%s",plaintext);
printf("\n");
}
void getLength() //获取后(右)移位数(密钥)
{
printf("请输入后移的位数:");
scanf("%d",&k);
k%=26; //因为字母只有26个,所以超过26相当于重复
}
void Caesar_cipher() //凯撒加密,本程序采用的是字母循环后(右)移
{
unsigned int i;
for(i=0;i<strlen(plaintext);i++)
{
//两个bool类型的变量是为了判断字符是否是字母(包括大写和小写)
bool flag1=plaintext[i]>='a'&&plaintext[i]<='z';
bool flag2=plaintext[i]>='A'&&plaintext[i]<='Z';
if(flag1||flag2){ //如果是字母,加密
ciphertext[i]=(int)plaintext[i]+k; //字母在字母表中后(右)移K位
if(ciphertext[i]>(int)'z'){ //保证是循环后(右)移
ciphertext[i]-=26;
}
}
else //非字母字符,不做处理,原样保存
ciphertext[i]=(int)plaintext[i];
}
}
void printCipherText() //输出加密后的密文
{
unsigned int i;
printf("\n加密后的密文是:");
for(i=0;i<strlen(plaintext);i++) //把参与计算后是整数强制转换成对应的字符
printf("%c",(char)ciphertext[i]);
printf("\n");
}
void main()
{
getPlainText(); //明文
getLength(); //后(右)移位数
Caesar_cipher(); //凯撒加密
printCipherText(); //密文
}
Ⅸ 说明:凯撒密码中的英文字母的移位以及25位循环的原理,初学密码学有些不明白为什么4段单词可推出6段的密文
凯撒密码不是需要数字密匙吗?你可以把维纳热尔方阵列出来看看,有第26行的 。
例如:phhw ph diwhu wkh wrjd swb 得出:meet me after the toga party
这个密文是倒数3位字母