c语言简单加密算法(C语言简单加密)

2023-02-13 17:18:42 密语知识 思思

c语言加密算法

看你催就仓促写了个,自我感觉写的不是很好,但是能用了。数据只能是大写字母组成的字符串。

加密的时候,输入Y,然后输入要加密的文本(大写字母)

解密的时候,输入N,然后输入一个整数n表示密文的个数,然后n个整数表示加密时候得到的密文。

/*RSA algorithm */

#include stdio.h

#include string.h

#include stdlib.h

#define MM 7081

#define KK 1789

#define PHIM 6912

#define PP 85

typedef char strtype[10000];

int len;

long nume[10000];

int change[126];

char antichange[37];

void initialize()

{ int i;

char c;

for (i = 11, c = 'A'; c = 'Z'; c ++, i ++)

{ change[c] = i;

antichange[i] = c;

}

}

void changetonum(strtype str)

{ int l = strlen(str), i;

len = 0;

memset(nume, 0, sizeof(nume));

for (i = 0; i l; i ++)

{ nume[len] = nume[len] * 100 + change[str[i]];

if (i % 2 == 1) len ++;

}

if (i % 2 != 0) len ++;

}

long binamod(long numb, long k)

{ if (k == 0) return 1;

long curr = binamod (numb, k / 2);

if (k % 2 == 0)

return curr * curr % MM;

else return (curr * curr) % MM * numb % MM;

}

long encode(long numb)

{ return binamod(numb, KK);

}

long decode(long numb)

{ return binamod(numb, PP);

}

main()

{ strtype str;

int i, a1, a2;

long curr;

initialize();

puts("Input 'Y' if encoding, otherwise input 'N':");

gets(str);

if (str[0] == 'Y')

{ gets(str);

changetonum(str);

printf("encoded: ");

for (i = 0; i len; i ++)

{ if (i) putchar('-');

printf(" %ld ", encode(nume[i]));

}

putchar('\n');

}

else

{ scanf("%d", len);

for (i = 0; i len; i ++)

{ scanf("%ld", curr);

curr = decode(curr);

a1 = curr / 100;

a2 = curr % 100;

printf("decoded: ");

if (a1 != 0) putchar(antichange[a1]);

if (a2 != 0) putchar(antichange[a2]);

}

putchar('\n');

}

putchar('\n');

system("PAUSE");

return 0;

}

测试:

输入:

Y

FERMAT

输出:

encoded: 5192 - 2604 - 4222

输入

N

3 5192 2604 4222

输出

decoded: FERMAT

c语言简单加密算法(C语言简单加密) 第1张

用c语言设计一个简单地加密算,解密算法,并说明其中的原理

可能很长 ,这是在我以前一个程序里摘出来的。

原理:用户输入创建密码,机器读取,并把每一位密码进行加密,这里就是把每一位的 ASCII码加一(也可以有其他的加密方式),然后保存在文件里。解密时从文件中读取保存的乱码,然后把它每一位的ascII码减一 在与你输入的密码比较,正确既可以进入。

#define CODE_SIZE 10

int password()

{

FILE *fp;

char s1[CODE_SIZE], s2[CODE_SIZE], s3[CODE_SIZE], fun;

while (1)

{

fp = fopen("password.txt", "r");

if (fp == NULL)

{

printf("第一次运行,请输入初始密码(最多8位):\n");

scanf("%s", s1);

printf("请再次输入初始密码:\n");

scanf("%s", s2);

if (strcmp(s1, s2) == 0)

{

fp = fopen("password.txt", "w+");

if (fp == NULL)

{

printf("创建文件失败退出\n");

getch();

exit(1);

}

else

{

//对s1加密

for (int i = 0; iCODE_SIZEs1[i] != ' '; i++)

{

s1[i] = s1[i] + i;

}

fputs(s1, fp);

printf("初始密码创建完成.\n");

}

}

else

{

printf("两次输入的密码不一致!\n");

}

fclose(fp);

}

else

{

fgets(s1, CODE_SIZE, fp);

fclose(fp);

printf("输入密码:\n");

scanf("%s", s2);

//对s1解密

for (int i = 0; iCODE_SIZEs1[i] != ' '; i++)

{

s1[i] = s1[i] - i;

}

loop:

if (strcmp(s1, s2) == 0)

{

printf("-----密码正确-----\n");

printf("-----请选择功能-----\n");

printf("-----1:修改密码-----\n");

printf("-----2:进入通讯录-----\n");

scanf("%d", fun);

switch (fun)

{

case 1: printf("请输入新密码\n");

scanf("%s", s1);

printf("请再次输入新密码\n");

scanf("%s", s2);

if (strcmp(s1, s2) == 0)

{

fp = fopen("password.txt", "w+");

if (fp == NULL)

{

printf("文件错误!\n");

}

else

{ //对s1加密

for (int i = 0; iCODE_SIZEs1[i] != ' '; i++)

{

s1[i] = s1[i] + i;

}

fputs(s1, fp);

fclose(fp);

printf("密码修改成功\n");

}

}

else

{

printf("两次输入的密码不一致,修改失败\n");

}

break;

case 2: return 1;

default: printf("无效指令\n");

}

}

else

{

printf("密码错误\n请重新输入\n");

scanf("%s", s2);

goto loop;

}

}

printf("------------------\n\n\n\n");

}

}

C语言怎样给文件加密

这个加密有简单的,有复杂的。要是简单的就直接选择文件中的某些字段,将某些字段进行1定的转换或在文件中位置的变更等。也能够将其中的每一个2进制读取,然落后行1定的运算后再存储,到达加密的效果。最后再依照1定的逆操作,恢复原来的文件,到达解密的效果。大致思路就是这样的,具体就看你的加解密的算法复杂与否了!举个非常简单的例子,可以将读取的某个数与1个你自己知道的固定的数做“异或”运算,解密的时候,你再次和这个数做“异或”运算,就能够恢复原来的那个数。这就是1种简单的加密算法,看似简单,不过却比较经常使用,由于,参与异或运算的值只有你自己知道。