#include <stdio.h>
#include <string.h>
#include <ctype.h>
char matrix[5][5];
void createMatrix(char key[]) {
int used[26] = {0};
int i, j, k = 0;
char ch;
for (i = 0; i < strlen(key); i++) {
ch = toupper(key[i]);
if (ch == 'J') ch = 'I';
if (!isalpha(ch)) continue;
if (!used[ch - 'A']) {
matrix[k / 5][k % 5] = ch;
used[ch - 'A'] = 1;
k++;
}
}
for (i = 0; i < 26; i++) {
if (i + 'A' == 'J') continue;
if (!used[i]) {
matrix[k / 5][k % 5] = i + 'A';
k++;
}
}
}
void find(char c, int *row, int *col) {
int i, j;
if (c == 'J') c = 'I';
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
if (matrix[i][j] == c) {
*row = i;
*col = j;
return;
}
}
void encrypt(char text[]) {
int i, row1, col1, row2, col2;
char a, b;
printf("Encrypted: ");
for (i = 0; i < strlen(text); i += 2) {
a = toupper(text[i]);
b = toupper(text[i + 1]);
if (a == 'J') a = 'I';
if (b == 'J') b = 'I';
if (a == b) b = 'X'; // insert filler letter
find(a, &row1, &col1);
find(b, &row2, &col2);
if (row1 == row2) {
printf("%c%c", matrix[row1][(col1 + 1) % 5], matrix[row2][(col2 + 1) % 5]);
} else if (col1 == col2) {
printf("%c%c", matrix[(row1 + 1) % 5][col1], matrix[(row2 + 1) % 5][col2]);
} else {
printf("%c%c", matrix[row1][col2], matrix[row2][col1]);
}
}
printf("\n");
}
int main() {
char key[30] = "KEYWORD";
char text[30] = "HELLO";
createMatrix(key);
encrypt(text);
return 0;
}
#include <stdio.h>
#include <string.h>
char matrix[5][5] = {
{'P','L','A','Y','F'},
{'I','R','E','X','M'},
{'B','C','D','G','H'},
{'K','N','O','Q','S'},
{'T','U','V','W','Z'}
};
// Function to find the position of a character in the matrix
void find(char ch, int *row, int *col) {
if (ch == 'J') ch = 'I'; // Treat 'J' as 'I'
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (matrix[i][j] == ch) {
*row = i;
*col = j;
return;
}
}
// Function to decrypt two characters using the Playfair cipher rules
void decrypt(char a, char b) {
int r1, c1, r2, c2;
find(a, &r1, &c1);
find(b, &r2, &c2);
if (r1 == r2) {
// Same row, move left
printf("%c%c", matrix[r1][(c1 + 4) % 5], matrix[r2][(c2 + 4) % 5]);
} else if (c1 == c2) {
// Same column, move up
printf("%c%c", matrix[(r1 + 4) % 5][c1], matrix[(r2 + 4) % 5][c2]);
} else {
// Rectangle, swap corners
printf("%c%c", matrix[r1][c2], matrix[r2][c1]);
}
}
int main() {
char ciphertext[] = "EXDXHZ"; // Ciphertext to decrypt
printf("Decrypting: %s\nDecrypted: ", ciphertext);
// Decrypt each pair of characters in the ciphertext
for (int i = 0; i < strlen(ciphertext); i += 2) {
decrypt(ciphertext[i], ciphertext[i + 1]);
}
printf("\n");
return 0;
}