我的原创加密技术——超撒加密

开头

大家好,我叫这是我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;
}

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入stdlib.h
导入string.h
导入time.h
定义supersar(超撒加密/解密)函数
把有99999个字符的字符串str初始化为空字符串
定义整型i为0
设置随机数的种子,种子为类型为无符号整型的时间戳
1?(永为真)
把字符串strp初始化为“加”
输出“你要用超撒密码加密还是解密?(0加密,非0解密) -> ”
把i设为你输入的数
i?
把strp设为“解”字
输出“请输入你要用超撒密码%s密的字符串(不能有不显示的字符) -> ”,“%s”代字符串strp
定义字符型指针pc为字符串str的首元素的地址
'\n' != getchar()?
把解引用的pc设为缓冲区里最先输入进去的字符
'\n' != *pc?
!(*pc > 31 && *pc++ < 127)?
输出“输入错误,请重新输入 -> ”
'\n' != getchar()
把一个有99999个字符的字符串strs初始化为空字符串
执行supersar函数,参数有字符串str,字符串strs和整型i
输出“%s密之后的字符串 -> %s\n------------------------------------------\n”(第一个“%s”代字符串strp,第二个“%s”代字符串strs)
supersar函数
把inl设为你输入的数
开始
定义整型inl为0
定义整型inr为0
定义整型ia为0
定义整型iak为0
把一个有99999个整形变量的数组keyarr里的元素都初始化为0
把字符串strno初始化为“要”字
ipass?
把字符串strno设为“有”字
输出“左边的干扰字符%s多少长度?(正整数) -> ”(“%s”代字符串strno)
inl < 0?
输出“输入错误,请重新输入一遍(正整数) -> ”
inl < 0?
输出“右边的干扰字符%s多少长度?(正整数) -> ”(“%s”代字符串strno)
把inr设为你输入的数
inr < 0?
输出“输入错误,请重新输入一遍(正整数) -> ”
inr < 0?
!ipass?
ia < 10000?
把数组keyarr的第ia项设为96
ia自增1
设ia为0
ia < inl?
把字符串strs的第ia项设为随机值模95加上32的结果
ia自增1
ia < inl + strlen(str)?
把数组keyarr的第ia减inl项设为随机值模95的结果
把字符串strs的第ia项设为字符串str的第ia减inl项
把整型iak设为数组keyarr的第ia减inl项
iak > 0?
字符串str的第ia项自增1
127 == strs[ia]?
把字符串strs的第ia项设为空格
iak自减1
ia自增1
设ia为0
ia < inr?
把字符串strs的第inl加上ia再加上字符串str的长度项设为随机值模95加上32的结果
ia自增1
输出“密钥:”
设ia为1
96 != keyarr[ia]?
输出“%d ”(“%d”代数组keyarr的第ia项)
ia自增1
输出“
密钥个数:%d
”(“%d”代ia减1的结果)
结束
定义整型in为0
输出“密钥有多少个数字? -> ”
把in设为你输入的数
输出“密钥组为多少? -> ”
设ia为0
ia < in?
把数组keyarr的第ia项设为你输入的数
ia自增1
设ia为inl
ia < strlen(str) - !(1 == strlen(str))*2 - inr?
把iak设为数组keyarr的第ia减inl项
把字符串strs的第ia减inl项设为字符串str的第ia项
iak > 0?
把字符串strs的第ia减inl项自减1
31 == strs[ia - inl]?
把字符串strs的第ia减inl项设为“~”
iak自减1
ia自增1

程序输入与输出的效果

例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的能让字符串超撒加密或者解密的程序。

相关推荐

  1. 加密技术——加密

    2024-07-18 06:44:03       25 阅读
  2. 加密2.0

    2024-07-18 06:44:03       27 阅读
  3. PHP AES加密:保护数据安全高级加密技术

    2024-07-18 06:44:03       66 阅读
  4. 盘点五种常用数据加密技术

    2024-07-18 06:44:03       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 06:44:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 06:44:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 06:44:03       58 阅读
  4. Python语言-面向对象

    2024-07-18 06:44:03       69 阅读

热门阅读

  1. 如何在网页中对视频进行截图

    2024-07-18 06:44:03       24 阅读
  2. 音频解码器音乐播放器

    2024-07-18 06:44:03       19 阅读
  3. mlstm_biaffine_cyc_fgm

    2024-07-18 06:44:03       18 阅读
  4. 72、Flink 的 DataGen 连接器详解

    2024-07-18 06:44:03       22 阅读
  5. Hive第三天

    2024-07-18 06:44:03       18 阅读