赞
踩
首先分析一下,加密的时候就是在输入的字符串中的每一个元素循环加上4962873的数字,因此,可以定义一个数组存放那些数字,然后,让输入的字符串的的元素加上数组中的数字。
这里用gets函数来输入字符串
确定主函数:
#include <iostream> #include<stdlib.h> #include <string.h> using namespace std; int main() { int Len1,Len2; char decrypt(char*,int); //声明解密函数 char encrypt(char*,int); //声明加密函数 char encry[100]; //定义加密数组 char decry[100]; //定义解密数组 cout<<"请输入原文:"; gets(encry); //输入加密数组 Len2= strlen(encry); //计算输入字符串的长度 cout<<"密码为:"; //输出密码 cout<<encrypt(encry,Len2); //应用加密函数 cout<<endl; cout<<"请输入密码:"; //输入密码 gets(decry); //输入密码 Len1=strlen(decry); //计算字符串长度 cout<< "解密:"; decrypt(decry,Len1); //应用解密函数 }
然后,编写加密程序,我这里用到了指针做函数的参数,其实不用指针直接用数组也可以实现
char encrypt(char*p1,int Len2 ) //定义加密函数 { int nums[]= {4,9,6,2,8,7,3}; //初始化要插入的数字的数组 int j; int output; for(int i=0; i<Len2; i++) //循环使每个加密数组的元素加上一个数字 { j=i; output=*(p1+i)+nums[j%6]; //加上数组上的元素,注意是j%6而不是7 if(output>122) //如果超出122则从32开始加 { output=output%122+31; //因为%122最小值为1,所以+31而不是32 } cout<<(char)output; //因为定义output为int类型所以输出时要强制转换,也可以不强制转换得到数字密码 } }
解密函数和加密函数的思路是一样的,只要令密码减去循环的数字就可以
char decrypt(char*p2,int Len1) //定义解密函数,主体与加密函数一致 { int j; int nums[]= {4,9,6,2,8,7,3}; int output; for(int i=0; i<Len1; i++) { j=i; output=*(p2+i)-nums[j%6]; if(output<32) { output=122-(31%output); } cout<<(char)output; } }
编译,运行得到的效果如下图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。