编写一个C++程序,要求:显示Vigenere方阵以及实现Vigenere的加密和解密
时间: 2024-05-25 08:17:18 浏览: 97
Vigenere密码的C语言程序
4星 · 用户满意度95%
#include <stdio.h>
#include <string.h>
#define SIZE 26
/* 显示Vigenere方阵 */
void showVigenereSquare() {
int i, j;
char vigenereSquare[SIZE][SIZE];
/* 生成Vigenere方阵 */
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
vigenereSquare[i][j] = (i + j) % SIZE + 'A';
}
}
/* 显示Vigenere方阵 */
printf("Vigenere Square:\n");
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
printf("%c ", vigenereSquare[i][j]);
}
printf("\n");
}
}
/* Vigenere加密 */
void vigenereEncrypt(char *plaintext, char *key, char *ciphertext) {
int i, j, len, keyLen;
char vigenereSquare[SIZE][SIZE];
/* 生成Vigenere方阵 */
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
vigenereSquare[i][j] = (i + j) % SIZE + 'A';
}
}
len = strlen(plaintext);
keyLen = strlen(key);
/* 对明文逐个字符进行加密 */
for (i = 0; i < len; i++) {
ciphertext[i] = vigenereSquare[plaintext[i] - 'A'][key[i % keyLen] - 'A'];
}
ciphertext[len] = '\0';
}
/* Vigenere解密 */
void vigenereDecrypt(char *ciphertext, char *key, char *plaintext) {
int i, j, len, keyLen;
char vigenereSquare[SIZE][SIZE];
/* 生成Vigenere方阵 */
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
vigenereSquare[i][j] = (i + j) % SIZE + 'A';
}
}
len = strlen(ciphertext);
keyLen = strlen(key);
/* 对密文逐个字符进行解密 */
for (i = 0; i < len; i++) {
for (j = 0; j < SIZE; j++) {
if (vigenereSquare[key[i % keyLen] - 'A'][j] == ciphertext[i]) {
plaintext[i] = j + 'A';
break;
}
}
}
plaintext[len] = '\0';
}
int main() {
char plaintext[50], key[20], ciphertext[50], decryptedtext[50];
/* 显示Vigenere方阵 */
showVigenereSquare();
/* 加密 */
printf("Enter plaintext: ");
gets(plaintext);
printf("Enter key: ");
gets(key);
vigenereEncrypt(plaintext, key, ciphertext);
printf("Ciphertext: %s\n", ciphertext);
/* 解密 */
vigenereDecrypt(ciphertext, key, decryptedtext);
printf("Decrypted text: %s\n", decryptedtext);
return 0;
}
阅读全文