以小說名字做網(wǎng)站的小說網(wǎng)提升關(guān)鍵詞排名軟件哪家好
?柵欄密碼的原理:
柵欄層數(shù)n
①把將要傳遞的信息中的字母交替排成上下n行。
②再將下面每一行字母排依次在上面一行的后邊,從而形成一段密碼。
③例如:柵欄層數(shù)為2
明文:THE LONGEST DAY MUST HAVE AN END
加密:
1、把將要傳遞的信息中的字母交替排成上下兩行。
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
2、 密文:
將下面一行字母排在上面一行的后邊。
TEOGSDYUTAENN HLNETAMSHVAED
解密:
先將密文分為兩行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的順序組合成一句話?
明文:THE LONGEST DAY MUST HAVE AN END?
代碼實現(xiàn)?
根據(jù)上面的原理,顯然我們可以用二維數(shù)組來解決加密解密的問題。?
#include <stdio.h>
#include <string.h>// 函數(shù):柵欄加密
void railFenceEncrypt(char* plainText, int rail, int len) {// 創(chuàng)建一個二維數(shù)組來存儲柵欄char fence[rail][len];//創(chuàng)建一個字符串來存密文char cipher[rail * len];// 將明文字符依次填入柵欄中for (int i = 0; i < rail; i++) {for (int j = 0; j < len; j++) {fence[i][j] = plainText[i + j * rail];}}//創(chuàng)建index存密文索引int index = 0;// 輸出密文printf("密文:");for (int i = 0; i < rail; i++) {for (int j = 0; j < len; j++) {if (fence[i][j] != '\0')cipher[index] = fence[i][j];index++;}}printf("%s", cipher);printf("\n");
}// 函數(shù):柵欄解密
void railFenceDecrypt(char* cipherText, int rail, int len) {// 創(chuàng)建一個二維數(shù)組來存儲柵欄char fence[rail][len];char plain[rail * len];for (int i = 0; i < rail; i++) {for (int j = 0; j < len; j++) {fence[i][j] = cipherText[i * len + j];}}int index = 0;printf("明文:");for (int i = 0; i < len * rail; i++) {for (int j = 0; j < rail; j++) {if (fence[j][i] != '\0' && index < len * rail)plain[index] = fence[j][i];index++;}}printf("%s", plain);
}//除去字符串中的空格
void removeSpaces(char* str) {int i, j = 0;int len = strlen(str);for (i = 0; i < len; i++) {if (str[i] != ' ') {str[j] = str[i];j++;}}str[j] = '\0';
}
int main() {printf("請輸入明文:");char plainText[100];//接收帶空格的字符串fgets(plainText, 100, stdin);removeSpaces(plainText);int rail = 0;int len = strlen(plainText);printf("明文:%s\n", plainText);printf("請輸入柵欄數(shù):");scanf("%d", &rail);railFenceEncrypt(plainText, rail, len / rail);//解密printf("請輸入密文:");char cipherText[1000];scanf("%s", cipherText);len = strlen(cipherText);printf("密文:%s\n", cipherText);printf("請輸入柵欄數(shù):");scanf("%d", &rail);railFenceDecrypt(cipherText, rail, len / rail);return 0;
}