简介
基于 C语言 编写的变种凯撒解密脚本
可以轻松的将带偏移(是这么叫吗?)的凯撒加密的抽象神秘字符串还原
详细用途
例:NTA-CTF[2023]
题名:凯撒
信息:lsip{Gpxpcbu_kg_Gyoslpj}
联系上下文可知这串神秘字符串就是凯撒加密后的flag
但是有些些微的变化
他每次的位移是不断加一的
f >> l = 6
l >> s = 7
a >> i = 8
g >> p = 9
这时候一些在线工具提供的凯撒解密就不太好用,哪怕有枚举功能也需要自己拼接
所以为了方便自己及锻炼 C语言 所以写了这个简单的脚本
可以实现带偏移的凯撒解密和数字位移的解密
源码
因为是 C语言 编写的编译一下就能用
而且也是为了省事所以直接给出源代码
# include "stdio.h"
int numbercaser (char *str);
int pluscaser (char *str);
int main (void){
char string [100];
int pd = -1;
while (pd != 0) {
printf("位移凯撒请扣\t1\n"
"数字凯撒请扣\t2\n"
"退出请扣\t0\n");
scanf("%d",&pd);
fflush(stdin);
switch (pd) {
case 1:
printf("请输入需要解密的神秘抽象字符串:");
fflush(stdin);
fgets(string,99,stdin);
fflush(stdin);
pluscaser(string);
break;
case 2:
printf("请输入需要解密的神秘抽象字符串:");
fflush(stdin);
fgets(string,99,stdin);
fflush(stdin);
numbercaser(string);
break;
case 0:
printf("感谢使用喵!关注「洛天依」谢谢喵!");
scanf("%d",string);
break;
default:
printf("按规矩输入哦亲!\n");
break;
}
}
return 0;
}
int numbercaser (char *str) {
int i,j,k,l,m;
i = j = k = l = m = 0;
int key;
printf("请输入 key :\n");
scanf("%d", &key);
fflush(stdin);
printf("明文:");
while (str[i++]) {
k = 0;
if (str[j] >= '0' && str[j] <= '9') k = '1';
l = key % 10;
if (k != 0) str[j] -= l;
if (k == '1' && str[j] < '0') str[j] += 10;
printf("%c", str[j]);
if (k != 0) m++;
j++;
};
printf("\n");
}
int pluscaser (char *str) {
int i,j,k,l,m;
i = j = k = l = m = 0;
int key,buchang;
printf("请依次输入 key 和 位移:\n");
scanf("%d",&key);
fflush(stdin);
scanf("%d",&buchang);
fflush(stdin);
printf("明文:");
while (str[i++]) {
k = 0;
if (str[j] >= 'a' && str[j] <= 'z') k = 'a';
if (str[j] >= 'A' && str[j] <= 'Z') k = 'A';
l = (key + m * buchang) % 26;
if (k != 0) str[j] -= l;
switch (k) {
case 'a':
if (str[j] < 'a') str[j] += 26;
break;
case 'A':
if (str[j] < 'A') str[j] += 26;
break;
};
printf("%c",str[j]);
if (k != 0) m++;
j++;
};
printf("\n");
}
另:
关注洛天依喵!
关注洛天依谢谢喵!