173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

简单的加密算法c语言

keros@mark 2022-11-07 资讯中心

今天给各位分享简单的加密算法c语言的知识,如果能碰巧解决你现在面临的问题,别忘了关注本站。

本文目录一览

用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");

}

}

RSA加密解密算法示例(C语言)

#include stdlib.h

#include stdio.h

#include string.h

#include math.h

#include time.h

#define PRIME_MAX 200   // 生成素数范围

#define EXPONENT_MAX 200 // 生成指数e范围

#define Element_Max 127    // 加密单元的最大值,这里为一个char, 即1Byte

char str_read[100]="hello world !";  // 待加密的原文

int str_encrypt[100];                // 加密后的内容

char str_decrypt[100];              // 解密出来的内容

int str_read_len;                    // str_read 的长度

int prime1, prime2;                  // 随机生成的两个质数

int mod, eular;                      // 模数和欧拉数

int pubKey, priKey;                  // 公钥指数和私钥指数

// 生成随机素数,实际应用中,这两个质数越大,就越难破解。

int randPrime()

{

int prime, prime2, i;

next:

prime = rand() % PRIME_MAX;   // 随机产生数

if (prime = 1) goto next;      // 不是质数,生成下一个随机数

if (prime == 2 || prime == 3) return prime;

prime2 = prime / 2;              // prime=4, prime2 的平方必定大于 prime , 因此只检查小于等于prime2的数

for (i = 2; i = prime2; i++)   // 判断是否为素数

{

if (i * i prime) return prime;

if (prime % i == 0) goto next;  // 不是质数,生成下一个随机数

}

}

// 欧几里德算法,判断a,b互质

int gcd(int a, int b)

{

int temp;

while (b != 0) {

temp = b;

b = a % b;

a = temp;

}

return a;

}

//生成公钥指数,条件是 1 e 欧拉数,且与欧拉数互质。

int randExponent()

{

int e;

while (1)

{

e = rand() % eular; if (e EXPONENT_MAX) break;

}

while (1)

{

if (gcd(e, eular) == 1) return e; e = (e + 1) % eular; if (e == 0 || e EXPONENT_MAX) e = 2;

}

}

//生成私钥指数

int inverse()

{

int d, x;

while (1)

{

d = rand() % eular;

x = pubKey * d % eular;

if (x == 1)

{

return d;

}

}

}

//加密函数

void jiami()           

{

str_read_len = strlen(str_read);      //从参数表示的地址往后找,找到第一个'\0',即串尾。计算'\0'至首地址的“距离”,即隔了几个字符,从而得出长度。

printf("密文是:");

for (int i = 0; i str_read_len; i++)

{

int C = 1; int a = str_read[i], b = a % mod;

for (int j = 0; j pubKey; j++) //实现加密

{

C = (C*b) % mod;

}

str_encrypt[i] = C;

printf("%d ", str_encrypt[i]);

}

printf("\n");

}

//解密函数

void jiemi()         

{

int i=0;  for (i = 0; i str_read_len; i++)

{

int C = 1; int a = str_encrypt[i], b=a%mod;

for (int j = 0; j priKey; j++)

{

C = (C * b) % mod;

}

str_decrypt[i] = C;

}

str_decrypt[i] = '\0'; printf("解密文是:%s \n", str_decrypt);

}

int main()

{

srand(time(NULL));

while (1)

{

prime1 = randPrime(); prime2 = randPrime(); printf("随机产生两个素数:prime1 = %d , prime2 = %d ", prime1, prime2);

mod = prime1 * prime2; printf("模数:mod = prime1 * prime2 = %d \n", mod); if (mod Element_Max) break; // 模数要大于每个加密单元的值

}

eular = (prime1 - 1) * (prime2 - 1);  printf("欧拉数:eular=(prime1-1)*(prime2-1) = %d \n", eular);

pubKey = randExponent(); printf("公钥指数:pubKey = %d\n", pubKey);

priKey = inverse(); printf("私钥指数:priKey = %d\n私钥为 (%d, %d)\n", priKey, priKey, mod);

jiami(); jiemi();

return 0;

}

C语言加密算法(简单)

MD5是HASH算法,他不能用来解密的,他主要是用来校验信息的完整型,也就是我们常说的数值签名,你可以去RFC文档上收索,上边有他具体的算法,代码也是封装好了的,可以去研究研究

c语言文件加密和解密

c语言文件加密和解密方法如下:

1、首先打开VC++6.0;

2、选择文件,新建;

3、选择C++ source file 新建一个空白文档;

4、声明头文件

#includestdio.h

#includestdlib.h

#includestring.h

首先写个加密函数,算法就是简介里说的;

void EncryptFile(FILE *sfp,FILE *dfp,char pwd)

{

char ch;

if(sfp==0||dfp==0)

{

printf("ERROR!\n");

return;

}

while((ch=fgetc(sfp))!=EOF)

{

if((ch='a')(ch='z'))

{

ch=(ch-'a'+1)%26+'a';

ch=ch^pwd;

}

if((ch='A')(ch='Z'))

{

ch=(ch-'A'+1)%26+'A';

ch=ch^pwd;

}

fputc(ch,dfp);

}

}

写解密子函数:与加密的过程相反; 

 void DecryptFile(FILE *sfp,FILE *dfp,char pwd)

{

char ch;

while((ch=fgetc(sfp))!=EOF)

{

if((ch='a')(ch='z'))

{

ch=ch^pwd;

ch=(ch-'a'+25)%26+'a';

}

if((ch='A')(ch='Z'))

{

ch=ch^pwd;

ch=(ch-'A'+25)%26+'A';

}

fputc(ch,dfp);

}

}

输出函数,输出文件内容

void OutputFile(FILE *fp)

{

char ch;

while((ch=fgetc(fp))!=EOF)

putchar(ch);

}

 主函数,主要调用这几个函数

int main()

{

/*用户输入的要加密的文件名*/

char sfilename[20];

/*用户输入加密后保存的文件名*/

char dfilename[20];

/*用来保存密码字符*/

char pwd;

FILE *sfp,*dfp;

printf("\nPlease input filename to be encrypted:\n");

/*得到要加密的文件名*/

gets(sfilename);

/*得到加密后你要的文件名*/

printf("input filename to save the encrypted file:\n");

gets(dfilename);

/*得到加密字符*/

printf("Please input your Password:\n");

//scanf("%c",pwd);

pwd=getch();

/*屏幕以*来表示输入的加密字符*/

printf("*\n");

/*以只读方式打开要加密的文件*/

if((sfp=fopen(sfilename,"r"))==0)

{

printf("Can't open the file :%s\n",sfilename);

exit(0);

}

/*输出要加密的文件*/

printf("\nThe the text of file to be encrypted is:\n");

OutputFile(sfp);

/*建立加密后的文件*/

if((dfp=fopen(dfilename,"w+"))==0)

{

printf("Can't open or create the file :%s\n",dfilename);

//exit(0);

}

/*文件加密*/

fseek(sfp,0L,SEEK_SET);

EncryptFile(sfp,dfp,pwd);

printf("\n\nEncrypted the file successfully!\n");

/*输出加密后的文件*/

printf("\nAfter encrypting the text of file is:\n");

fseek(dfp,0L,SEEK_SET);

OutputFile(dfp);

fclose(sfp);

fclose(dfp);

getch();

return 0;

}

 

C语言 加密算法

#include stdio.h

#include string.h

#define MAX_LEN 1024

#define MAX_KEY_LEN 10

/* key必须是1-9之间的数字 */

/* 拥有K个字符的Key,包含且仅包含1-K */

int CheckKey(char*key)

{

int i,check[MAX_KEY_LEN]={0};

int max=strlen(key);

int keyVal;

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

{

keyVal = key[i]-'0';

if(keyVal  max || keyVal  1)

 return 0;

if(check[keyVal]==1)

 return 0;

else

 check[keyVal] = 1;

}

return 1;

}

int Encrypt( char* word, char* key, char* secretWord )

{

int i,start;

int nLenWord = strlen(word);

int nLenKey = strlen(key);

int index[MAX_KEY_LEN];

if(nLenWord % nLenKey != 0)

{

printf("明文的位数不是密钥位数的整数倍!\n");

return 0;

}

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

{

index[i] = key[i] - '0' -1;

}

/*START 关键代码*/

start = 0;

while(start  nLenWord)

{

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

{

 secretWord[start + i] = word[start + index[i]];

}

start += nLenKey;

}

secretWord[nLenWord] = '\0';

/* END 关键代码*/

return 1;

}

int main()

{

char word[MAX_LEN];

char key[MAX_KEY_LEN];

char secretWord[MAX_LEN];

printf("请输入明文:");

scanf("%1024s",word);

printf("请输入密钥:");

scanf("%10s",key);

if(!CheckKey(key))

{

printf("密钥输入错误!\n");

exit(-1);

}

if(Encrypt(word,key,secretWord))

       printf("密文是:%s\n",secretWord);

return 0;

}

C语言加密算法

#include stdio.h

int const N = 10;

// 将方阵a[N][N]第row行循环左移m位

void RowLeftn(char a[][N],int n,int row,int m) {

int i,j,t;

if(row  0 || row  n - 1) return;

for(i = 0; i  m; ++i) {

t = a[row][0];

for(j = 0; j  n - 1; ++j)

a[row][j] = a[row][j + 1];

a[row][n - 1] = t;

}

}

// 将方阵a[N][N]第col列循环上移m位

void ColUpn(char a[][N],int n,int col,int m) {

int i,j,t;

if(col  0 || col  n - 1) return;

for(i = 0; i  m; ++i) {

t = a[0][col];

for(j = 0; j  n - 1; ++j)

a[j][col] = a[j + 1][col];

a[n - 1][col] = t;

}

}

int main() {

char txt[N][N];

int a[N],b[N],i,j,n;

while(scanf("%d",n) == 1  n  0) {

fflush(stdin);

for(i = 0; i  n; ++i) {

for(j = 0; j  n; ++j)

scanf("%c",txt[i][j]);

}

for(i = 0; i  n; ++i) {

for(j = 0; j  n; ++j)

printf("%c",txt[i][j]);

printf("\n");

}

for(i = 0; i  n; ++i) scanf("%d",a[i]);

for(i = 0; i  n; ++i) scanf("%d",b[i]);

for(i = 0; i  n; ++i) RowLeftn(txt,n,i,a[i]);

for(i = 0; i  n; ++i) ColUpn(txt,n,i,b[i]);

for(i = 0; i  n; ++i) {

for(j = 0; j  n; ++j)

printf("%c",txt[i][j]);

}

printf("\n");

}

return 0;

}

智能化时代的到来涉及了各种核心算法,保护算法就能保障开发者权益,杜绝市面上各种山寨品,加密芯片恰好能起到很好的保护作用,如何选择加密芯片呢?KEROS加密芯片专注于加密领域十余年,行业首选。
1.安全性:采用国际通用aes256算法加密并同时通过KAS传送,除基本认证之外,利用2K安全EEPROM,用户可以自己管理密钥和数据,实现双重保护。
2.唯一性:以定制的方式为每一位用户单独定制“专属型号CID”,多用户之间算法不兼容,并且采用固化的方法直接将算法固化到晶圆上而无需烧入。
3.序列号:每颗芯片制造生产时具有5字节全球唯一SN序列号,每颗芯片SN都不会重复。
4.防抄特性:每颗芯片都有自己独特的密钥系统,破解单颗芯片只对这颗芯片对应的产品有效,对整个同类型的产品是无效的,依旧无法通过验证。而且KEROS采用ASIC方法设计,芯片内为纯逻辑电路,封装内有40多层逻辑电路整合了10万多个逻辑门,爆力刨片破解难度可想而知。
5.安全存储:用户可以将保密数据加密之后安全的存放到EEPROM中。简单的加密算法c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容。

产品列表
产品封装
友情链接