加密.文本.

/*编译环境:xp3 32位    编译工具:vc6.0*/
/*第一次运行输入密码#deabc
运行加密后在同目录下生成连个文件
num.txt和word.txt
解密时这连个文件需要和exe文件在同一个目录下才行
ps:一个无知的c爱好者..时不时弄点东西..记录自己走过的路
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void input (void);
void finput (void);
void conversion (void);
int random_number(void);
void print (void);
char ch[50];
int num[50];
int i; // 写入文本的字节数




int main (void)
{
char ch;
char ch2[10]; //初始运行的口令
puts ("请输入运行密码:");
gets (ch2);
if (strcmp (ch2,"#deabc") == 0)
{
puts ("******************************************");
puts ("加密文本输入(a)            解密文本输入(b)");
puts ("******************************************");
fflush (stdin);
while ((ch = getchar()) != '\n')
{
puts ("******************************************");
fflush (stdin);
if (ch == 'a')
{


input ();
conversion ();
finput (); 
puts ("******************************************");
}
else if (ch == 'b')
print ();
else 
{
puts ("输入的不是 a或b 请重新输入字母 a或b.");
puts ("******************************************");
}
puts ("******************************************");
puts ("加密文本输入(a)            解密文本输入(b)");
puts ("******************************************");
}
}
else
{
puts ("密码错误.");
getchar();
}
puts ("Bye !");


return 0;
}
/*****************************************************************/


// 加密


void input (void) // 输入
{
puts ("请输入账号和密码(回车结束输入):");
gets (ch);
fflush (stdin);
}


void conversion (void) // 字符串转换成数字
{
for (i=0; ch[i] != '\0'; i++)
num[i] = (int)ch[i] + random_number();
num[i] = '\n'+ random_number();//添加换行符
}


void finput (void) // 保存到文件
{
FILE * fp;
if ((fp = fopen ("word.txt", "a+b")) == NULL)
{
fputs ("打开word.txt失败.\n", stderr);
exit (EXIT_FAILURE);
}
fwrite (num,(i+1)*sizeof(int), 1, fp);// 写入文件
if (ferror (fp) != 0)
fputs ("写入文件失败.\n", stderr);
if (fclose (fp) != 0)
fputs ("关闭文件失败.\n", stderr);
}


int random_number(void) // 获取随机数
{
static unsigned long int next, num;
static int i=0;
FILE * fp;
int number;
if(i==0) //只调用一次time();
{
next=time(0);
i++;
}
next=next*123456789+9871345;
num =(unsigned int)(next/445566)%349;
number = (int)num;
// 保存随机数到文件
if ((fp = fopen ("num.txt", "a+b")) == NULL)
{
fputs ("打开word.txt失败.\n", stderr);
exit (EXIT_FAILURE);
}
fwrite (&number, sizeof(number), 1, fp);
if (ferror (fp) != 0)
fputs ("写入文件失败.\n", stderr);
if (fclose (fp) != 0)
fputs ("关闭文件失败.\n", stderr);
return number;
}




/*****************************************************************/


// 解密


void print (void)   // 数字转换成字符并输出到屏幕
{
unsigned long int num;
int num2, ch2;
int ch; //结束标志
FILE * fp;
FILE * fp2;
if ((fp = fopen ("num.txt", "r")) == NULL)
{
fputs ("打开word.txt失败.\n", stderr);
exit (EXIT_FAILURE);
}
if ((fp2 = fopen ("word.txt", "r")) == NULL)
{
fputs ("打开word.txt失败.\n", stderr);
exit (EXIT_FAILURE);
}


fread (&num, sizeof(int), 1, fp);
fread (&num2, sizeof(int), 1, fp2);
ch = getc (fp);// 使用之后 指针自动前移1
fseek (fp, -1, SEEK_CUR);// 指针后移1
while (ch != EOF )
{
ch2 = num2 - num;
printf ("%c", ch2);
fread (&num, sizeof(int), 1, fp);
fread (&num2, sizeof(int), 1, fp2);
ch = getc (fp);// 使用之后 指针自动前移1
fseek (fp, -1, SEEK_CUR);// 指针后移1
}


ch2 = num2 - num;
printf ("%c", ch2);


puts ("******************************************");
if (ferror (fp) != 0)
fputs ("读取文件失败.\n", stderr);
if (fclose (fp) != 0)
fputs ("关闭文件失败.\n", stderr);
if (ferror (fp2) != 0)
fputs ("读取文件失败.\n", stderr);
if (fclose (fp2) != 0)
fputs ("关闭文件失败.\n", stderr);
}




/*****************************************************************/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值