基于随机数的对称数据加密

这个加密算法是一个简单,适合于c语言新手的算法。

算法可以加密任何符号,包括汉字,空格

目录

1.加密原理

 2.加密代码实现

3.解密原理

             4.解密代码实现

5.总结


1.加密原理

其实很简单,众所周知每一个字符都有一个其所对应的ASCII码,所以只需要将要加密的文本转化为一串ASCII码,然后对这一串数据进行操作即可,这里用的是rand函数。当然我们可以用time函数让每次的随机数不一样。

2.加密代码实现

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
long miwen = time(0);//生成种子即密匙
int jiami(long *wenben,int shu)//加密函数
{
	srand(miwen);
	int mijia[99], i;
	for (i = 0; i <= 98; i++)
	{
		mijia[i] = rand() % 21;//生成随机数组
	}
	for (i = 0; i <= shu-2; i++)
	{
		wenben[i] = wenben[i] + mijia[i];//加密
	}
	return 0;
}



int main()
{
	char wenben[99];
	int i = 0,j=0,aa=1;
	for (j = 0; j < 99; j++)// 文本初始化
	{
		wenben[j] = '|';
	}
	j = 0;
	long wenbenbian[99] = {0};//密文初始化
	printf("即将加密的文本:");
	do                        //接收文本
	{
		wenben[i] = getchar();
		putchar(wenben[i]);
		i++;
	} while (wenben[i-1]!='\n');
	i = 0;
	do                       //转化文本为密文
	{
		wenbenbian[i]=wenben[i];
		i++;
	} while (i!=98);
	printf("\n");
	i = 0;
	do                    //分析文本数量
	{
		if (wenbenbian[i] == '|')
		{
			j = i-1;
			aa = 0;
		}
		i++;
	} while (aa);
	jiami(wenbenbian, j);//加密
	printf("\n");
	printf("密匙:%ld\n", miwen);
	i = 0;
	printf("密文:");
	do
	{
		printf("%ld",wenbenbian[i]);
		printf(" ");
		i++;
	} while (i!=j);
	while (1);
}

3.解密原理

其实就是加密的逆运算,不过有个处理密文的过程。

4.解密代码实现

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int i=0,j=0,aa=1;
	long mishi;
	char wenben[99], wenben2[99];
	int wenben1[99] = {0};            //初始化密文
	for (i = 0; i < 99; i++)          //初始化文本
	{
		wenben2[i] = ' ';
	}
	i = 0;
	printf("输入密文:");
	do                                  // 提取密文
	{
		wenben[i] = getchar();
		putchar(wenben[i]);
		if (wenben[i] == ' '|| wenben[i] == '\n')
		{
			if (wenben[i] == '\n')
			{
				aa = 0;
			}
			wenben1[j] = atoi(wenben);
			j++;
			i = -1;
		}
		i++;
	} while (aa);
	printf("\n");
	printf("输入密匙:");
	scanf_s("%ld",&mishi);
	srand(mishi);              //种子即密匙
	int mijia[99];
	for (i = 0; i <= 98; i++)
	{
		mijia[i] = rand() % 21;
	}
	for (i = 0; i <= j-2; i++)  //解密
	{
		wenben1[i] = wenben1[i] - mijia[i];
	}
	for (i = 0; i <= j; i++)
	{
		wenben2[i] = wenben1[i];
	}
	printf("文本:%s", wenben2);
	while (1);
}

5.总结

这只是一个适合初学者的小程序,可以作为无聊时的解闷,实用性可能是有点的,不过加密量和效率都很低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值