c语言置换密码
❶ 用c语言或者其他语言编写替代密码和置换密码
给你,自己再稍微改造一下吧:
#include "stdio.h"
#include "conio.h"
main()
{
int k,i=0;
char a[100],b[100];
printf("qing shu ru ni de mi wen \n");
gets(a);
printf("qing shu ru mi shi \n");
scanf("%d",&k);
printf("\n");
do{
b[i]=(char)(a[i]+k);
if(b[i]>122){
b[i]=(char)(b[i]-26);
}
i++;
}while(a[i]!='\0');
puts(b);
getch();
}
❷ C语言设计一个用简单的加密程序,即用字母替换的方式加密,程序运行中发现问题,求解释。
原因就是char是1个字节的,你不能超过127(hi,楼上的,不是128哦,是-128~127不要误人子弟),你到后面的vwxyz已经溢出,所以是乱码。
我的解决方法就很简单,就是换成unsigned char 数组,这样取值范围增大到(0~255)就可以了,既简单又不破坏原有的结构
还有
else if(str[i]<'a')
{
str[i]+=26;
}
这句话是废话,可以删掉
我修改过的版本
#include <stdio.h>
#include <string.h>
#include <ctype.h>
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");
while(1)//程序一直运行,直到输入密钥0为止
{
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);
}
}
❸ C语言程序。急!
在单表置换密码中,密钥是由字母与空格组成的 如shana
在没有密钥作用前,置换表如下
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 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 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
S H A N B C D E F G I J K L M O P Q R T U V W X Y Z
首先将SHAN填入表中,因为A已经在前面出现,所以忽略,接着将除去S H A N四个字符的字母表按顺序填充
C语言程序:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#defineMAX101 /*明文字符串的最大长度*/
char*encrypt(char*source,char*key);
intcontain(char*source,intn,charch);
voidmain()
{
char*source; /*明文*/
char*dest; /*密文*/
char*key; /*密钥*/
source=(char*)malloc(sizeof(char)*MAX);
dest=(char*)malloc(sizeof(char)*MAX);
key=(char*)malloc(sizeof(char)*MAX);
printf("请输入明文字符串:");
gets(source);
printf("请输入密钥:");
gets(key);
dest=encrypt(source,key);
printf("密文字符串:");
puts(dest);
}
/*加密明文(单表置换加密),返回密文*/
char*encrypt(char*source,char*key)
{
char*dest;
inti,j;
intlen1=strlen(source);
intlen2=strlen(key);
charch;
dest=(char*)malloc(sizeof(char)*MAX);
source=strupr(source);
key=strupr(key);
for(i=0;i<len1;i++)
{
dest[i]=NULL;
}
dest[i]='