本篇文章给大家谈谈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;
}
例如:简单的移位加密可以这样
FILE *fp=fopen("test.txt","r");
FILE *fp1=fopen("new.txt","w");
while((c=fgetc(fp))!=EOF)
fputc(c+1,fp1);//逐个读取全部字符,ASCII值+1并保存到另一个文件
然后可以remove("test.txt");//删除文件
或者读取new.txt再写回test.txt
解密就是ASCII值-1
可能很长 ,这是在我以前一个程序里摘出来的。
原理:用户输入创建密码,机器读取,并把每一位密码进行加密,这里就是把每一位的 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");
}
}
#includestdio.h
#includestring.h
void MtoC(char m[50],char k[10],char c[50])
{
int m1[50],k1[10],c1[50],i,j;
for(i=0;istrlen(k);i++)
k1[i]=k[i]-'a';
for(j=0;jstrlen(m);j++)
{
m1[j]=m[j]-'a';
c1[j]=(m1[j]+k1[j%strlen(k)])%26;
c[j]=c1[j]+'a';
printf("%c------%c\n",m[j],c[j]);
}
}
void CtoM(char c[50],char k[10],char m[50])
{
int m1[50],k1[10],c1[50],i,j;
for(i=0;istrlen(k);i++)
k1[i]=k[i]-'a';
for(j=0;jstrlen(m);j++)
{
c1[j]=c[j]-'a';
m1[j]=(c1[j]-k1[j%strlen(k)]+26)%26;
m[j]=m1[j]+'a';
printf("%c------%c\n",c[j],m[j]);
}
}
int main(void)
{
int i,j;
char m[50], k[10], c[50],t[50];
printf("输入明文:");
gets(t);
j=0;
for(i=0;t[i]!='\0';i++){
if(t[i]='Z't[i]='A'){
m[j]=t[i]+32;
j++;
}
else if(t[i]='z't[i]='a'){
m[j]=t[i];
j++;
}
}
m[j]='\0';
printf("输入密钥:");
scanf("%s",k);
printf("明文转换为密文:n");
MtoC(m,k,c);
printf("密文转换为明文:n");
CtoM(c,k,m);
}
智能化时代的到来涉及了各种核心算法,保护算法就能保障开发者权益,杜绝市面上各种山寨品,加密芯片恰好能起到很好的保护作用,如何选择加密芯片呢?KEROS加密芯片专注于加密领域十余年,行业首选。
1.安全性:采用国际通用aes256算法加密并同时通过KAS传送,除基本认证之外,利用2K安全EEPROM,用户可以自己管理密钥和数据,实现双重保护。
2.唯一性:以定制的方式为每一位用户单独定制“专属型号CID”,多用户之间算法不兼容,并且采用固化的方法直接将算法固化到晶圆上而无需烧入。
3.序列号:每颗芯片制造生产时具有5字节全球唯一SN序列号,每颗芯片SN都不会重复。
4.防抄特性:每颗芯片都有自己独特的密钥系统,破解单颗芯片只对这颗芯片对应的产品有效,对整个同类型的产品是无效的,依旧无法通过验证。而且KEROS采用ASIC方法设计,芯片内为纯逻辑电路,封装内有40多层逻辑电路整合了10万多个逻辑门,爆力刨片破解难度可想而知。
5.安全存储:用户可以将保密数据加密之后安全的存放到EEPROM中。c语言加密算法代码的介绍就聊到这里吧,感谢你花时间阅读本站内容。
本文标签:c语言加密算法代码