开头
大家好,我叫这是我58。超撒加密,就是一种先在要进行这种加密的字符串前面添加上一些干扰字符(是一种可以让破解的人被迷惑的字符),然后把这个字符串的每一个字符分别进行凯撒加密,密钥为随机值,最后,只需要再在要进行这种加密的字符串后面添加上一些干扰字符,就完成对这个字符串的超撒加密了。至于对这种加密效果的解密,只需要知道密钥组,密钥个数,左边的干扰字符的长度和右边的干扰字符的长度,就可以根据这些东西解密用了超撒加密加密的字符串了,当然,由于我的这个程序有一点点的bug,所以,有时字符串超撒加密或者解密的时候就会出错。望周知。
程序
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void supersar(char* str, char* strs,int ipass) {
int inl = 0;
int inr = 0;
int ia = 0;
int iak = 0;
int keyarr[99999] = { 0 };
char strno[] = "要";
ipass && strcpy(strno,"有");
printf("左边的干扰字符%s多少长度?(正整数) -> ",strno);
do {
scanf("%d", &inl);
inl < 0 && printf("输入错误,请重新输入一遍(正整数) -> ");
} while (inl < 0);
printf("右边的干扰字符%s多少长度?(正整数) -> ",strno);
do {
scanf("%d", &inr);
inr < 0 && printf("输入错误,请重新输入一遍(正整数) -> ");
} while (inr < 0);
if (!ipass) {
for (; ia < 10000; ia++) {
keyarr[ia] = 96;
}
for (ia = 0; ia < inl; ia++) {
strs[ia] = rand() % 95 + 32;
}
for (; ia < inl + strlen(str); ia++) {
keyarr[ia - inl] = rand() % 95;
strs[ia] = str[ia - inl];
for (iak = keyarr[ia - inl]; iak > 0; iak--) {
strs[ia]++;
127 == strs[ia] && (strs[ia] = ' ');
}
}
for (ia = 0; ia < inr; ia++) {
strs[inl + ia + strlen(str)] = rand() % 95 + 32;
}
for (printf("密钥:"),ia = 1; 96 != keyarr[ia]; ia++) {
printf("%d ",keyarr[ia-1]);
}
printf("\n密钥个数:%d\n", ia-1);
}
else {
int in = 0;
printf("密钥有多少个数字? -> ");
scanf("%d", &in);
printf("密钥组为多少? -> ");
for (ia = 0; ia < in; ia++) {
scanf("%d", &keyarr[ia]);
}
for (ia = inl; ia < strlen(str) - !(1 == strlen(str))*2 - inr; ia++) {
iak = keyarr[ia - inl];
strs[ia - inl] = str[ia];
for (; iak > 0; iak--) {
strs[ia - inl]--;
31 == strs[ia - inl] && (strs[ia - inl] = '~');
}
}
}
}
int main() {
char str[99999] = "";
int i = 0;
srand((unsigned int)time(NULL));
while (1) {
char strp[] = "加";
printf("你要用超撒密码加密还是解密?(0加密,非0解密) -> ");
scanf("%d", &i);
i && strcpy(strp, "解");
printf("请输入你要用超撒密码%s密的字符串(不能有不显示的字符) -> ", strp);
char* pc = str;
while ('\n' != getchar()) {
;
}
while (*pc = getchar(), '\n' != *pc) {
if (!(*pc > 31 && *pc++ < 127)) {
printf("输入错误,请重新输入 -> ");
while ('\n' != getchar()) {
;
}
}
}
char strs[99999] = "";
supersar(str, strs, i);
printf("%s密之后的字符串 -> %s\n------------------------------------------\n", strp, strs);
}
return 0;
}
程序的流程图
程序输入与输出的效果
例1
输入
你要用超撒密码加密还是解密?(0加密,非0解密) -> 0
请输入你要用超撒密码加密的字符串(不能有不显示的字符) -> Hello,world!
左边的干扰字符要多少长度?(正整数) -> 1
右边的干扰字符要多少长度?(正整数) -> 2
输出
密钥:86 50 64 57 22 30 57 26 9 2 45 20
密钥个数:12
加密之后的字符串 -> y?8MF&JQ*{n256B2
例2
输入
你要用超撒密码加密还是解密?(0加密,非0解密) -> 1
请输入你要用超撒密码解密的字符串(不能有不显示的字符) -> y?8MF&JQ*{n256B2
左边的干扰字符有多少长度?(正整数) -> 1
右边的干扰字符有多少长度?(正整数) -> 2
密钥有多少个数字? -> 12
密钥组为多少? -> 86 50 64 57 22 30 57 26 9 2 45 20
输出
解密之后的字符串 -> Hello,world!
例3
输入
你要用超撒密码加密还是解密?(0加密,非0解密) -> 0
请输入你要用超撒密码加密的字符串(不能有不显示的字符) -> 6
左边的干扰字符要多少长度?(正整数) -> 6
右边的干扰字符要多少长度?(正整数) -> 6
输出
密钥:17
密钥个数:1
加密之后的字符串 -> )/_xQ4GE&$x!iA
结尾
这就是我的原创的加密技术——超撒加密。而且也根据它用C语言编译出了一个还有一点小bug的能让字符串超撒加密或者解密的程序。