超撒加密2.0

开头

大家好,我叫这是我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[] = "要";
	char keystr[99999] = "";
	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--) {
				127 == ++strs[ia] && (strs[ia] = ' ');
			}
		}
		//后干扰字符
		for (ia = 0; ia < inr; ia++) {
			strs[inl + ia + strlen(str)] = rand() % 95 + 32;
		}
		//输出密钥
		for (printf("密钥:"), ia = 0; 96 != keyarr[ia]; ia++) {
			printf("%c", keyarr[ia] + 32);
		}
		printf("\n");
	}
	else {
		char* pc = keystr;
		//密钥询问
		printf("密钥为多少? -> ");
		while ('\n' != getchar()) {
			;
		}
		while (*pc=getchar(), '\n' != *pc++) {
			;
		}
		//超撒解密
		for (*pc = '\0', ia = inl; ia < strlen(str) - inr; ia++) {
			iak = keystr[ia - inl] - 32;
			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);
		printf("请输入你要用超撒密码%s密的字符串(不能有控制字符) -> ", (i && strcpy(strp, "解"), strp));
		char* pc = str;
		while ('\n' != getchar()) {
			;
		}
		while (*pc = getchar(), '\n' != *pc) {
			if (!(*pc > 31 && *pc++ < 127)) {
				printf("输入错误,请重新输入 -> ");
				while ('\n' != getchar()) {
					;
				}
				while (pc != str) {
					*pc-- = '\0';
				}
			}
		}
		*pc = '\0';
		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()
pc != str?
把解引用的pc设为'\0',并把pc向左移动一位
把解引用的pc设为'\0'
把一个有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初始化为“要”字
把有99999个字符的字符串keystr初始化为空字符串
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?
127 == ++strs[ia]?
把字符串strs的第ia项设为空格
iak自减1
ia自增1
设ia为0
ia < inr?
把字符串strs的第inl加上ia再加上字符串str的长度项设为随机值模95加上32的结果
ia自增1
输出“密钥:”
设ia为0
96 != keyarr[ia]?
输出“%c”(“%c”代数组keyarr的第ia项加上32的结果)
ia自增1
输出“\​n”
结束
定义字符型指针pc为字符串keystr的首元素地址
输出“密钥为多少? -> ”
'\​n' != getchar()?
把解引用的pc设为从缓冲区里最先读取到的字符
'\​n' != *pc++?
把解引用的pc设为'\0'
设ia为inl
ia < strlen(str) - inr?
把iak设为数组keyarr的第ia减inl项再减去32的结果
把字符串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
请输入你要用超撒密码加密的字符串(不能有控制字符) -> 1+1=2
左边的干扰字符要多少长度?(正整数) -> 1
右边的干扰字符要多少长度?(正整数) -> 2

加密之后的字符串与密钥

密钥:Dz#4f
加密之后的字符串 -> jU&4Qx?H

例2

解密的过程

你要用超撒密码加密还是解密?(0加密,非0解密) -> 1
请输入你要用超撒密码解密的字符串(不能有控制字符) -> jU&4Qx?H
左边的干扰字符有多少长度?(正整数) -> 1
右边的干扰字符有多少长度?(正整数) -> 2
密钥为多少? -> Dz#4f

解密之后的字符串

解密之后的字符串 -> 1+1=2

例3

加密的过程

你要用超撒密码加密还是解密?(0加密,非0解密) -> 0
请输入你要用超撒密码加密的字符串(不能有控制字符) -> SuperSa
左边的干扰字符要多少长度?(正整数) -> 5
右边的干扰字符要多少长度?(正整数) -> 5

加密之后的字符串与密钥

密钥:>%-Ac’h
加密之后的字符串 -> ut47Yqz}'VZJm8K>*

超撒密码的优点与缺点

优点

  • 可以增加能干扰人的字符,从而让破解这种密码的人会多破解几次,并且拖延了破解这种密码的人的时间
  • 用超撒密码加密过后的字符串的长度越长,安全性就越高,被破解的几率也就越小。
  • 不能使用频率分析或者样式单词分析来轻松地解密用超撒密码加密过后的字符串,因为把一个字符串用超撒密码加密过后,这个字符串本身的所有字符就都被用密钥为随机值的凯撒密码加密了
  • 把用超撒密码加密过后的字符串再用超撒密码解密之后,如果密钥错误,就有可能解密出一个相当正常但却不与原来的字符串相同的结果了,例如把"str"在左边的干扰字符和右边的干扰字符的个数都为0的情况下加密成y'r,密钥为&2,这是,如果把要解密的字符串y'r,左边的干扰字符和右边的干扰字符的个数和密钥&2都用来解密的话,就解密成原来的字符串str了,如果在这之中,密钥为6E,就解密成与原来的字符串毫不相关的字符串car

缺点

  • 用超撒密码加密过后的字符串的长度如果越长,那密钥就越不能容易记进脑子里面去

结尾

在你看到这里之后,可以评论来互动一下我哦。

相关推荐

  1. 加密2.0

    2024-07-18 18:56:05       27 阅读
  2. 我的原创加密技术——加密

    2024-07-18 18:56:05       24 阅读
  3. python基础24(完结花)_习题总结

    2024-07-18 18:56:05       41 阅读
  4. re:从0开始的CSS之旅 20. 渐变(暂完结花)

    2024-07-18 18:56:05       47 阅读
  5. c++ 凯密码

    2024-07-18 18:56:05       36 阅读
  6. C# 实现 凯密码

    2024-07-18 18:56:05       39 阅读

最近更新

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

    2024-07-18 18:56:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 18:56:05       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 18:56:05       58 阅读
  4. Python语言-面向对象

    2024-07-18 18:56:05       69 阅读

热门阅读

  1. P1009 [NOIP1998 普及组] 阶乘之和

    2024-07-18 18:56:05       22 阅读
  2. Springboot加载机制

    2024-07-18 18:56:05       18 阅读
  3. 100亿美元,得物估值到顶了吗?

    2024-07-18 18:56:05       21 阅读
  4. 3 WebAPI

    3 WebAPI

    2024-07-18 18:56:05      20 阅读
  5. Python--文件读写

    2024-07-18 18:56:05       22 阅读
  6. 【人工智能】生成式AI的未来发展方向探讨

    2024-07-18 18:56:05       21 阅读
  7. C语言 goto语句

    2024-07-18 18:56:05       19 阅读
  8. llama-cpp-python

    2024-07-18 18:56:05       21 阅读
  9. sqlalchemy定期保持mysql连接活跃

    2024-07-18 18:56:05       19 阅读
  10. 如何处理客户暗战

    2024-07-18 18:56:05       19 阅读