[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
|