本帖最后由 kingbin 于 2022-3-24 13:37 编辑
嘿嘿,昨天又搞了一下午,算是勉强做出来了吧
[C] 纯文本查看 复制代码 #include<stdio.h>
#include<string.h>
//Author:Shadowbin
//Date:2022年3月23日
//列置换加密,不太严谨,有待改进
int main() {
char passwd[100], encrypted[100], ls[11][11]; //ls为临时二维数组
char key[10];
while (1) {
//TODO
memset(ls, 0, sizeof ls); //清空数组,防止第二次覆盖时出现Bug
memset(passwd, 0, sizeof passwd);
memset(encrypted, 0, sizeof encrypted);
printf("请输入你要加密的密钥:");
gets(key);
printf("请输入你要加密的明文:");
gets(passwd);
int a = 0, c = strlen(key), b = strlen(passwd) / strlen(key), r = b + 1;
for (int i = 0; i < strlen(key); i++) {
//TODO获取key并将其放到临时数组的第一列中
ls[0][i] = key[i];
}
for (int i = 1; i <= r; i++) {
//TODO
for (int j = 0; j < c; j++) {
//TODO
ls[i][j] = passwd[a];
a++;
}
}
//打印出临时二维数组
// for (int i = 0; i <= r; i++) {
// //TODO
// for (int j = 0; j < c; j++) {
// //TODO
// printf("%c", ls[i][j]);
// }
// printf("\n");
// }
// 打印输出密文
printf("密文为:");
for (int i = 49; i <= (c + 49); i++) {
//TODO
for (int j = 0; j < c; j++) {
//TODO
if (int(ls[0][j]) == i) {
//TODO
for (int k = 1; k <= r; k++) {
//TODO
printf("%c", ls[k][j]);
}
}
}
}
printf("\n");
}
} |