天天看点

给文件简单加密

#include <iostream>

#include <string>

#include <stdio.h>

#include <stdlib.h>

#include

<time.h>

#define buff_len 1024

using namespace std;

long file_len(string file_name);

void init(string file_name)

{

}

void release()

int get_random(int max_rand)

srand (time(null));

int r = rand()

% max_rand + 1;

return r;

long file_len(string file_name)

file * pfile;

long

size;

pfile = fopen (file_name.c_str(),"rb");

if (pfile==null)

perror ("error opening file");

else

fseek (pfile, 0, seek_end);

// non-portable

size=ftell (pfile);

fclose (pfile);

printf ("size of myfile.txt: %ld bytes.\n",size);

return

void buff_reverse(char *buff, size_t len, file *ou_f)

for (int i =

len - 1; i >= 0; --i)

fputc(buff[i], ou_f);

void encry_file(string src_file, string tgt_file, int

rand_seed)

file *in_f = fopen(src_file.c_str(), "rb");

file *ou_f =

fopen(tgt_file.c_str(), "wb");

int r =

get_random(rand_seed);

fwrite(&rand_seed, sizeof(int), 1,

ou_f);

fwrite(&r, sizeof(int), 1, ou_f);

char buff[buff_len];

r

= get_random(buff_len);

size_t len = fread(buff, sizeof(char), r,

in_f);

while (!feof(in_f))

fwrite(&len, sizeof(int), 1,

buff_reverse(buff, len, ou_f);

r =

get_random(buff_len);

len = fread(buff, sizeof(char), r,

fwrite(&len, sizeof(int), 1, ou_f);

buff_reverse(buff,

len, ou_f);

fclose(in_f);

fclose(ou_f);

int is_not_accu(int rand_seed, int c)

int g =

printf("rand_seed:%d, key:%d, guess:%d\n", rand_seed,

c, g);

if (c == g) return 0;

else return 1;

int decry_file(string src_file, string tgt_file)

file *in_f =

fopen(src_file.c_str(), "rb");

int rand_seed, c;

char

buff[buff_len];

fread(&rand_seed, sizeof(int), 1,

fread(&c, sizeof(int), 1, in_f);

//verification part

if

(is_not_accu(rand_seed, c)) {

printf("failed\n");

1;

file *ou_f = fopen(tgt_file.c_str(), "wb");

size_t len =

size_t

len_in = fread(buff, sizeof(char), c, in_f);

buff_reverse(buff, len_in,

len = fread(&c, sizeof(int), 1, in_f);

size_t len_in =

fread(buff, sizeof(char), c, in_f);

printf("success\n");

0;

void args()

printf("encrypt src_file tgt_file

rand_seed\n");

printf("decrypt src_file tgt_file\n");

int main(int argc, char **argv)

if (argc <

3)

args();

return 1;

string comm =

string(argv[1]);

if (comm == "encrypt")

string src_file =

string(argv[2]);

string tgt_file = string(argv[3]);

int rand_seed =

atoi(argv[4]);

encry_file(src_file, tgt_file, rand_seed);

else if

(comm == "decrypt")

string src_file = string(argv[2]);

string

tgt_file = string(argv[3]);

decry_file(src_file,

tgt_file);