c语言文件加密6,C语言 文件加密解密

根据你的需要,修改了之前的代码。

#include #include #include #include const unsigned int MAX_KEY_LENGTH = 1000;int encode(char const *datafile, char const *keyfill);int decode(char const *datafile, char const *keyfile);int loadKey(char const *keyfile, int *keys, unsigned int size);int saveKey(char const *keyfile, int *keys, unsigned int size);int generateKey(int *keys, unsigned int size);int main(int argc, char const *argv[]){ char datafile[] = "encrypted.txt"; char keyfile[] = "key.txt"; int retcode, choice, loop = 1; char ch[5] = {'\0'}; while(1) { printf("1. Encryption.\n"); printf("2. Decryption.\n"); printf("3. Exit.\n"); printf("Selection (1,2,3):"); fgets(ch, sizeof(ch), stdin); sscanf(ch, "%d", &choice); switch(choice) { case 1: retcode = encode(datafile, keyfile); if (retcode != 0) printf("error, %d\0", retcode); break; case 2: retcode = decode(datafile, keyfile); if (retcode != 0) printf("error, %d\0", retcode); break; case 3: loop = 0; break; default: ; break; } if (0 == loop) break; } return 0;}int generateKey(int *keys, unsigned int size) { char str[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,./;\"'<>?"; size_t str_len = sizeof(str)/sizeof(str[0]); int i; srand(time(NULL)); for (i = 0; i < size; ++i) keys[i] = str[rand() % str_len]; return 0;}int loadKey(char const *keyfile, int *keys, unsigned int size){ int i = 0; FILE *pfile; int retcode = 0; pfile = fopen(keyfile, "r"); if (pfile == NULL) return -1; while ( !feof(pfile) ) { if (i < size) fscanf(pfile, "%d ", &keys[i++]); else break; } fclose(pfile); return i;}int saveKey(char const *keyfile, int *keys, unsigned int size) { FILE *pfile; int i; pfile = fopen(keyfile, "w"); if (pfile == NULL) return -1; for(i = 0; i < size; ++i) { fprintf(pfile, "%d ", keys[i]); } fclose(pfile); return 0;}int encode(char const *datafile, char const *keyfile) { char original[MAX_KEY_LENGTH] = {'\0'}; char encrypted[MAX_KEY_LENGTH] = {'\0'}; int i, size; int keys[MAX_KEY_LENGTH]; FILE *pdatafile, *pkeyfile; pkeyfile = fopen(keyfile, "w"); if (NULL == pkeyfile) return -1; fclose(pkeyfile); puts(" input message:"); gets(original); size = strlen(original); if (0 != generateKey(keys, size)) return -2; if (0 != saveKey(keyfile, keys, size) ) return -3; pdatafile = fopen(datafile, "w"); if (NULL == pdatafile) return -4; for (i = 0; i < size; ++i) { encrypted[i] = original[i] + keys[i]; fputc(encrypted[i], pdatafile); fputc(encrypted[i], stdout); } printf("\n"); fclose(pdatafile); return 0;}int decode(char const *datafile, char const *keyfile){ FILE *pdatafile, *pkeyfile; int keys[MAX_KEY_LENGTH] = {0}; char original[MAX_KEY_LENGTH] = {'\0'}; char encrypted[MAX_KEY_LENGTH] = {'\0'}; int i, size; pkeyfile = fopen(keyfile, "r"); if (NULL == pkeyfile) return -1; fclose(pkeyfile); pdatafile = fopen(datafile, "r"); if (NULL == pdatafile) return -2; fscanf(pdatafile,"%s",encrypted); fclose(pdatafile); size = loadKey(keyfile, keys, MAX_KEY_LENGTH); if (size < 1) return -3; for (i = 0; i < strlen(encrypted); ++i) { original[i] = encrypted[i]-keys[i]; fputc(original[i], stdout); } printf("\n"); return 0;}运行结果:

1. Encryption.2. Decryption.3. Exit.Selection (1,2,3):1 input message:this is A test!╓┐»╞Lñ╗ù|t▄╬╢╒è1. Encryption.2. Decryption.3. Exit.Selection (1,2,3):2this is A test!1. Encryption.2. Decryption.3. Exit.Selection (1,2,3):3

取消

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值