[root@playmud sec]#cat sec.c #include #include
int do_crypt(FILE *in, FILE *out, int do_encrypt); int main(int argc,char
**argv) { FILE * fin; FILE * fout; fin =
fopen(argv[1], "a+"); fout = fopen(argv[2], "a+");
do_crypt(fin, fout, atoi(argv[3])); return 0; } int
do_crypt(FILE *in, FILE *out, int do_encrypt) { char inbuf[1024],
outbuf[1024 + EVP_MAX_BLOCK_LENGTH]; int inlen, outlen;
EVP_CIPHER_CTX ctx; unsigned char key[] = "0123456789";
unsigned char iv[] = "12345678"; /* 这时候不进行key和IV的设置,因为我们还要修改参数
*/ EVP_CIPHER_CTX_init(&ctx);
EVP_CipherInit_ex(&ctx, EVP_rc4(), NULL, NULL, NULL, do_encrypt);
EVP_CIPHER_CTX_set_key_length(&ctx, 10); /* 完成参数设置,进行key和IV的设置
*/ EVP_CipherInit_ex(&ctx, NULL, NULL, key, iv, do_encrypt);
for(;;) { inlen = fread(inbuf, 1,
1024, in); if(inlen <= 0) break;
if(!EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf,
inlen)) { /*出错处理
*/ return 0;
} fwrite(outbuf, 1, outlen, out); }
if(!EVP_CipherFinal_ex(&ctx, outbuf, &outlen))
{ /* 出错处理*/ return 0;
} fwrite(outbuf, 1, outlen, out);
EVP_CIPHER_CTX_cleanup(&ctx); return 1; }
[root@playmud sec]# gcc -o sec sec.c -lcrypto [root@playmud sec]# echo
"abcdefg" >in.txt [root@playmud sec]# ./sec in.txt out.txt
1 [root@playmud sec]# ls in.txt out.txt sec sec.c [root@playmud
sec]# cat out.txt ?庄~W絊[root@playmud sec]# [root@playmud sec]# ./sec
out.txt out2.txt 0 [root@playmud sec]# cat
out2.txt abcdefg |