0
点赞
收藏
分享

微信扫一扫

【C语言练习_3】用C语言实现维吉尼亚密码加密解密

1.维吉尼亚密码简介

人们在凯撒密码的基础上扩展出多表密码,称为维吉尼亚密码。

加密方法:根据密钥来决定用哪一行的密表来进行替换。

例如:明文是D  ;密钥是C ;那么就在C对应的密表中找D对应的密文F

    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

C -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

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

2.代码

#include<stdio.h>

//加密
int encrypt(char* plaintext, char* ciphertext, char* k)
{
int l, i, j = 0, z = 0;
for (l = 0; plaintext[l] != '\0'; l++);
for (i = 0; i < l; i++)
{
ciphertext[z] = (plaintext[i] - 'a' + k[j] - 'a') % 26 + 'a';
j++;
z++;
}
return 0;
}

//解密
int decrypt(char* plaintext, char* ciphertext, char* k)
{
int l, i, j = 0, z = 0;
for (l = 0; plaintext[l] != '\0'; l++);
for (i = 0; i < l; i++)
{
ciphertext[z] = (plaintext[i] - k[j] + 26) % 26 + 'a';
j++;
z++;
}
return 0;
}

int main()
{
char plaintext[50] = "";
char ciphertext[50] = "";
char k[50] = "";
int type;
printf("请填写明文或者密文:\n");
scanf("%[^\n]", plaintext);
printf("请选择加密方式,输入1加密,输入2解密\n");
scanf("%d", &type);
printf("请输入密钥k\n");
scanf("%s", k);
if (type == 1) {
//加密
encrypt(plaintext, ciphertext, k);
printf("明文%s的密文为:%s\n", plaintext,ciphertext);
}
else if (type == 2) {
//解密
decrypt(plaintext, ciphertext, k);
printf("密文%s的明文为:%s\n", plaintext, ciphertext);
}
return 0;
}

运行结果:

【C语言练习_3】用C语言实现维吉尼亚密码加密解密_c语言实现

【C语言练习_3】用C语言实现维吉尼亚密码加密解密_加密解密_02

举报

相关推荐

0 条评论