简单的加密解密

某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,
在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
然后,把加密后的结果在控制台打印出来。

题目要求:
A:数据是小于8位的整数
定义一个int类型的数据
int number = 123456;
B:加密规则
a:首先将数据倒序
结果 654321
b:然后将每位数字都加上5,再用和除以10的余数代替该数字
结果 109876
c:最后将第一位和最后一位数字交换
结果 609871
C:把加密后的结果输出在控制台

#include <stdio.h>

/*
函数名:jiami
参数列表:整型数,字符数组首地址
函数功能:加密整型数input到字符数组array中
返回值:无
*/

int jiami(int input, char array[])
{
	//传递参数检查
	if(array == NULL)
	{
		return -1;
	}
	if(input < 0 || input > 99999999)
	{
		return -1;
	}
	
	int a[8]={0};
	int len=0;
	int i=0;
	
	
	while(input != 0)				//将输入值反序存入数组a[8]中
	{
		a[i]=input%10;
		input=input/10;
		i++;
		len++;
	}
	
	for(i = 0; i < len; i++)		//加密过程
	{
		a[i]=(a[i]+5)%10;
	}
	
	int temp = a[0];
	a[0] = a[len-1];
	a[len-1] = temp;				//加密结束
	
	for(i=0;i<len;i++)
	{
		array[i]=a[i]+'0';			//将加密后的结果数组a[8]转换成字符并存入array[]
	}
	
	return 1;
}

/*
	函数名:jiemi
	参数列表:字符数组首地址
	函数功能:将字符数组中的字符型数字解密成一个整形数
	返回值:整型值
*/
int jiemi(char *pe)
{
	if(pe == NULL)
	{
		return -1;
	}
	
	int i=0;
	int a[8] = {0};
	int len  = 0;
	int num  = 0;
	char *p  = pe;
	
	while(*p != 0)				//字符数组值存入整型数组
	{
		a[i]=*p-'0';
		i++;
		len++;
		p++;
	}
	
	
	int temp = a[0];			//开始解密
	a[0] = a[len-1];
	a[len-1] = temp;
	
	for(i=0;i<len;i++)
	{
		if(a[i] < 5)
		{
			a[i] = a[i]+5;
		}
		else
		{
			a[i] = a[i]-5;
		}
	}
	
	for(i=0;i<len;i++)
	{
		num=10*num+a[len-1-i];
	}
	
	return num;
	
}

int main()
{
	int number;
	char encrypted[10]={0}; 
	
	printf("Input number=");	
	scanf("%d",&number);				//输入number
	jiami(number,encrypted);			//加密number到字符数组encrypted中
	printf("加密 = %s\n",encrypted);			//输出加密后的结果
	printf("解密 = %d\n",jiemi(encrypted));    //输出解密后的结果
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值