用C或是C++实现明文到密文的转换
发布网友
发布时间:2022-04-29 17:27
我来回答
共2个回答
热心网友
时间:2023-10-23 15:54
给,已经在VC上编译运行确认了:
#include<conio.h>
#include<stdio.h>
#define N 20 //暂定密钥词最长为20个字符
#define M 100 //暂定输入明文最长为100个字符
void main()
{
int key[N]={NULL},keylength=0;
int beforeStr[M]={NULL},strlength=0;
int afterStr[M]={NULL};
int i,j;
char ch;
printf("请输入密钥单词: ");
while((ch=getchar())!='\n') key[keylength++]=ch-'a';
printf("请输入明文: ");
while((ch=getchar())!='\n')
{
if(ch>='a'&&ch<='z')
beforeStr[strlength++]=ch-'a';
else beforeStr[strlength++]=ch-'\0';
}
for(i=0,j=0;i<strlength;i++)
{
if(beforeStr[i]>=0&&beforeStr[i]<=25)
{
afterStr[i]=(beforeStr[i]+key[j%keylength])%26;
j++;
}
else afterStr[i]=beforeStr[i];
}
printf("加密后为: ");
for(i=0;i<strlength;i++)
{
if(afterStr[i]>=0&&afterStr[i]<=25) printf("%c",afterStr[i]+'a');
else printf("%c",afterStr[i]+'\0');
}
getch();
}
热心网友
时间:2023-10-23 15:54
从cipher对应2,8,15,7,4,17看出
a~z对应0~25
'a' - 'a' = 0
...
'z' - 'a' =25
------------------------------------------------
char str[] = "meet me after party";
char key[] = "cipher";
int len_str = strlen(str);
int len_key = strlen(key);
int i,j;
// 1)首先把明文字母转换为对应的数字。
for(i=0; i<len_str; i++)
{
str[i] -= 'a';
}
// 2)把密钥字母转换为对应的数字
for(i=0; i<len_key; i++)
{
key[i] -= 'a';
}
// 3)明文数字与密钥数字相加,如果相加的结果大于26,那么将该结果减26
j = 0;
for(i=0; i<len_str; i++)
{
if(j==len_key) j=0;
str[i] += key[j];
if(str[i]>26) str[i] -= 26;
j++;
}
// 4)转换成字符
for(i=0; i<len_str; i++)
{
str[i] += 'a';
}
热心网友
时间:2023-10-23 15:54
给,已经在VC上编译运行确认了:
#include<conio.h>
#include<stdio.h>
#define N 20 //暂定密钥词最长为20个字符
#define M 100 //暂定输入明文最长为100个字符
void main()
{
int key[N]={NULL},keylength=0;
int beforeStr[M]={NULL},strlength=0;
int afterStr[M]={NULL};
int i,j;
char ch;
printf("请输入密钥单词: ");
while((ch=getchar())!='\n') key[keylength++]=ch-'a';
printf("请输入明文: ");
while((ch=getchar())!='\n')
{
if(ch>='a'&&ch<='z')
beforeStr[strlength++]=ch-'a';
else beforeStr[strlength++]=ch-'\0';
}
for(i=0,j=0;i<strlength;i++)
{
if(beforeStr[i]>=0&&beforeStr[i]<=25)
{
afterStr[i]=(beforeStr[i]+key[j%keylength])%26;
j++;
}
else afterStr[i]=beforeStr[i];
}
printf("加密后为: ");
for(i=0;i<strlength;i++)
{
if(afterStr[i]>=0&&afterStr[i]<=25) printf("%c",afterStr[i]+'a');
else printf("%c",afterStr[i]+'\0');
}
getch();
}
热心网友
时间:2023-10-23 15:54
从cipher对应2,8,15,7,4,17看出
a~z对应0~25
'a' - 'a' = 0
...
'z' - 'a' =25
------------------------------------------------
char str[] = "meet me after party";
char key[] = "cipher";
int len_str = strlen(str);
int len_key = strlen(key);
int i,j;
// 1)首先把明文字母转换为对应的数字。
for(i=0; i<len_str; i++)
{
str[i] -= 'a';
}
// 2)把密钥字母转换为对应的数字
for(i=0; i<len_key; i++)
{
key[i] -= 'a';
}
// 3)明文数字与密钥数字相加,如果相加的结果大于26,那么将该结果减26
j = 0;
for(i=0; i<len_str; i++)
{
if(j==len_key) j=0;
str[i] += key[j];
if(str[i]>26) str[i] -= 26;
j++;
}
// 4)转换成字符
for(i=0; i<len_str; i++)
{
str[i] += 'a';
}
热心网友
时间:2023-10-23 15:54
给,已经在VC上编译运行确认了:
#include<conio.h>
#include<stdio.h>
#define N 20 //暂定密钥词最长为20个字符
#define M 100 //暂定输入明文最长为100个字符
void main()
{
int key[N]={NULL},keylength=0;
int beforeStr[M]={NULL},strlength=0;
int afterStr[M]={NULL};
int i,j;
char ch;
printf("请输入密钥单词: ");
while((ch=getchar())!='\n') key[keylength++]=ch-'a';
printf("请输入明文: ");
while((ch=getchar())!='\n')
{
if(ch>='a'&&ch<='z')
beforeStr[strlength++]=ch-'a';
else beforeStr[strlength++]=ch-'\0';
}
for(i=0,j=0;i<strlength;i++)
{
if(beforeStr[i]>=0&&beforeStr[i]<=25)
{
afterStr[i]=(beforeStr[i]+key[j%keylength])%26;
j++;
}
else afterStr[i]=beforeStr[i];
}
printf("加密后为: ");
for(i=0;i<strlength;i++)
{
if(afterStr[i]>=0&&afterStr[i]<=25) printf("%c",afterStr[i]+'a');
else printf("%c",afterStr[i]+'\0');
}
getch();
}
热心网友
时间:2023-10-23 15:54
从cipher对应2,8,15,7,4,17看出
a~z对应0~25
'a' - 'a' = 0
...
'z' - 'a' =25
------------------------------------------------
char str[] = "meet me after party";
char key[] = "cipher";
int len_str = strlen(str);
int len_key = strlen(key);
int i,j;
// 1)首先把明文字母转换为对应的数字。
for(i=0; i<len_str; i++)
{
str[i] -= 'a';
}
// 2)把密钥字母转换为对应的数字
for(i=0; i<len_key; i++)
{
key[i] -= 'a';
}
// 3)明文数字与密钥数字相加,如果相加的结果大于26,那么将该结果减26
j = 0;
for(i=0; i<len_str; i++)
{
if(j==len_key) j=0;
str[i] += key[j];
if(str[i]>26) str[i] -= 26;
j++;
}
// 4)转换成字符
for(i=0; i<len_str; i++)
{
str[i] += 'a';
}
热心网友
时间:2023-10-23 15:54
给,已经在VC上编译运行确认了:
#include<conio.h>
#include<stdio.h>
#define N 20 //暂定密钥词最长为20个字符
#define M 100 //暂定输入明文最长为100个字符
void main()
{
int key[N]={NULL},keylength=0;
int beforeStr[M]={NULL},strlength=0;
int afterStr[M]={NULL};
int i,j;
char ch;
printf("请输入密钥单词: ");
while((ch=getchar())!='\n') key[keylength++]=ch-'a';
printf("请输入明文: ");
while((ch=getchar())!='\n')
{
if(ch>='a'&&ch<='z')
beforeStr[strlength++]=ch-'a';
else beforeStr[strlength++]=ch-'\0';
}
for(i=0,j=0;i<strlength;i++)
{
if(beforeStr[i]>=0&&beforeStr[i]<=25)
{
afterStr[i]=(beforeStr[i]+key[j%keylength])%26;
j++;
}
else afterStr[i]=beforeStr[i];
}
printf("加密后为: ");
for(i=0;i<strlength;i++)
{
if(afterStr[i]>=0&&afterStr[i]<=25) printf("%c",afterStr[i]+'a');
else printf("%c",afterStr[i]+'\0');
}
getch();
}
热心网友
时间:2023-10-23 15:54
从cipher对应2,8,15,7,4,17看出
a~z对应0~25
'a' - 'a' = 0
...
'z' - 'a' =25
------------------------------------------------
char str[] = "meet me after party";
char key[] = "cipher";
int len_str = strlen(str);
int len_key = strlen(key);
int i,j;
// 1)首先把明文字母转换为对应的数字。
for(i=0; i<len_str; i++)
{
str[i] -= 'a';
}
// 2)把密钥字母转换为对应的数字
for(i=0; i<len_key; i++)
{
key[i] -= 'a';
}
// 3)明文数字与密钥数字相加,如果相加的结果大于26,那么将该结果减26
j = 0;
for(i=0; i<len_str; i++)
{
if(j==len_key) j=0;
str[i] += key[j];
if(str[i]>26) str[i] -= 26;
j++;
}
// 4)转换成字符
for(i=0; i<len_str; i++)
{
str[i] += 'a';
}