原因就是char是1个字节的,你不能超过127(hi,楼上的,不是128哦,是-128~127不要误人子弟),你到后面的vwxyz已经溢出,所以是乱码。
我的解决方法就很简单,就是换成unsigned char 数组,这样取值范围增大到(0~255)就可以了,既简单又不破坏原有的结构
还有
else if(str[i]<'a')
{
str[i]+=26;
}
这句话是废话,可以删掉
我修改过的版本
#include <stdioh>
#include <stringh>
#include <ctypeh>
void EncodeString(unsigned char str,int key)
{
int length,i;//length为传入字符串长度,i用作循环计数器
length=strlen(str);
for(i=0;i<length;i++)//对字符串中的每个字符依次进行加密
{
if(isupper(str[i]))//对大写字母加密
{
str[i]+=key%26;
if(str[i]>'Z')
{
str[i]-=26;
}
}
else if(islower(str[i]))//对小写字母加密
{
str[i]+=key%26;
if(str[i]>'z')
{
str[i]-=26;
}
}
}
}
void main()
{
unsigned char arr[50],buffer;//arr[50]用来接收字符串信息,buffer用来接收缓冲区中的回车
int key;//key为加密秘钥
printf("This program encodes messages using a cyclic cipher\n");
printf("To stop, enter 0 as the key\n");
{
printf("Enter the key: ");
scanf("%d",&key);
scanf("%c",&buffer);
if(0==key)
{
break;//输入密钥为0,则退出程序
}
printf("Enter a message: ");
scanf("%s",arr);
scanf("%c",&buffer);
EncodeString(arr,key);
printf("Encoded message: %s\n",arr);
}
}
加密和解密算法是程序编制中的重要一环。试想,如果我们平时使用的腾讯QQ、支付宝支付密码、今日头条账号密码那么轻易就被别人**的话,很多不可以预料的事情就会发生!
在现实生活中,我们遇到过太多QQ密码被**的情况,有的朋友QQ被盗之后,骗子利用朋友间信任骗取钱财的事情屡见不鲜。支付宝也曾出现过支付宝账户被恶意**的事件,对用户利益造成了严重损害!这些在技术上都指向了同一相关问题:软件加密算法的强壮程度。今天,小编利用C语言来简单实现一种加密方法。下面是源代码。
需要说明:程序利用了ascii码值的按照一定规律变换实现加密,对于解密过程,则是加密的逆过程。下面是程序的运行结果。
4190阅读
搜索
编程免费课程300节
初学编程100个代码
java自学一般要学多久
5秒破解excel密码
python必背100源代码
40岁零基础学编程
/
输入1个四位数,将其加密后输出。
方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。
例:括号内是说明
输入
1257
输出
The encrypted number is 4621(每一位上的数字加9除以10取余后,得0146,交换后得到4601)
/
#include <stdioh>
int main( )
{
int number, digit1, digit2, digit3, digit4, newnum;
scanf("%d", &number);
digit1 = number/1000;
digit2 = (number - 1000 digit1)/100;
digit3 = (number - 1000 digit1 - 100 digit2)/10;
digit4 = number - 1000 digit1 - 100 digit2 - 10 digit3;
digit1 += 9;
digit1 %= 10;
digit2 += 9;
digit2 %= 10;
digit3 += 9;
digit3 %= 10;
digit4 += 9;
digit4 %= 10;
//第三位数是1的情况不做考虑
newnum = digit3 1000 + digit4 100 + digit1 10 +digit2;
printf("The encrypted number is %d\n", newnum);
return 0;
}
#include<stdioh>
#include<stdlibh>
main()
{
int key;
char ch;
printf("\n请输入密钥:");
scanf("%d",&key);
printf("得到对应明文如下:");
while((ch=getchar())!='\r')
(ch+key)>122putchar(ch-122+33+key):
((ch+key)<33putchar(ch+122+key):putchar(ch+key));
}
输入输出如下:
请输入密钥:20addse
得到对应明文如下:uxxy
你先输入一个任意的整数,如20,然后在键盘上输入一段任意的字符如addse
按回车键结束,就会得到结果 如:uxxy
下面是另一组输入输出:
请输入密钥:35asjRYIRER!@#$^^&
得到对应明文如下:+=4u#luhuDcFG((MI-
具体是如何加密,你应该能看懂,就是用一个三目运算符 :控制。
以上就是关于C语言设计一个用简单的加密程序,即用字母替换的方式加密,程序运行中发现问题,求解释。全部的内容,包括:C语言设计一个用简单的加密程序,即用字母替换的方式加密,程序运行中发现问题,求解释。、c语言编写的程序,在输入密码时,如何加密、C语言数字加密等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)