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

c加密算法库

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

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

本文目录一览

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语言加密算法(简单)

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

急求一个完整的c语言图像置乱加密算法!!!

#include "windows.h" 

#include "stdio.h"  

#include "string.h"  

#include "malloc.h"  

unsigned char *pBmpBuf;//读入图像数据的指针  

unsigned char *pEnBmpBuf;//加密图像数据的指针

unsigned char *pUnBmpBuf;//解密图像数据的指针

char key=255;//密钥

int bmpWidth;//图像的宽  

int bmpHeight;//图像的高  

RGBQUAD *pColorTable;//颜色表指针  

int biBitCount;//图像类型,每像素位数  

bool readBmp(char *bmpName)  

{  

//二进制读方式打开指定的图像文件  

FILE *fp=fopen(bmpName,"rb");  

if(fp==0) return 0;  

//跳过位图文件头结构BITMAPFILEHEADER  

fseek(fp, sizeof(BITMAPFILEHEADER),0);  

//定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中  

BITMAPINFOHEADER head;     

fread(head, sizeof(BITMAPINFOHEADER), 1,fp);    

//获取图像宽、高、每像素所占位数等信息  

bmpWidth = head.biWidth;  

bmpHeight = head.biHeight;  

biBitCount = head.biBitCount;  

//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)  

int lineByte=(bmpWidth * biBitCount/8+3)/4*4;  

//灰度图像有颜色表,且颜色表表项为256  

if(biBitCount==8){  

//申请颜色表所需要的空间,读颜色表进内存  

pColorTable=new RGBQUAD[256];  

fread(pColorTable,sizeof(RGBQUAD),256,fp);  

}  

//申请位图数据所需要的空间,读位图数据进内存  

pBmpBuf=new unsigned char[lineByte * bmpHeight];  

fread(pBmpBuf,1,lineByte * bmpHeight,fp);  

//关闭文件  

fclose(fp);  

return 1;  

}  

void  encrypt(char k)

{

//加密,奇数位置的像素使用位运算加密,偶数位置像素为原始值

int lineByte=(bmpWidth * biBitCount/8+3)/4*4;

pEnBmpBuf=new unsigned char[lineByte * bmpHeight]; 

for (int i=0;ilineByte * bmpHeight;i++) 

{

if (i%2==0)

{

pEnBmpBuf[i]=pBmpBuf[i];

}

else pEnBmpBuf[i]=pBmpBuf[i]^k;

}

}

void  unencrypt(char k)

{

//解密

int lineByte=(bmpWidth * biBitCount/8+3)/4*4;

pUnBmpBuf=new unsigned char[lineByte * bmpHeight]; 

for (int i=0;ilineByte * bmpHeight;i++) 

{

if (i%2==0)

{

pUnBmpBuf[i]=pEnBmpBuf[i];

}

else pUnBmpBuf[i]=pEnBmpBuf[i]^k;

}

}

bool saveBmp(char *bmpName, unsigned char *imgBuf, int width, int height,    

int biBitCount, RGBQUAD *pColorTable)  

{  

//如果位图数据指针为0,则没有数据传入,函数返回  

if(!imgBuf)  

{printf("error\n!");return 0;  }

//颜色表大小,以字节为单位,灰度图像颜色表为1024字节,彩色图像颜色表大小为0  

int colorTablesize=0;  

if(biBitCount==8)  

colorTablesize=1024;  

//待存储图像数据每行字节数为4的倍数  

int lineByte=(width * biBitCount/8+3)/4*4;  

//以二进制写的方式打开文件  

FILE *fp=fopen(bmpName,"wb");  

if(fp==0) return 0;  

//申请位图文件头结构变量,填写文件头信息  

BITMAPFILEHEADER fileHead;  

fileHead.bfType = 0x4D42;//bmp类型  

//bfSize是图像文件4个组成部分之和  

fileHead.bfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)  

+ colorTablesize + lineByte*height;  

fileHead.bfReserved1 = 0;  

fileHead.bfReserved2 = 0;  

//bfOffBits是图像文件前3个部分所需空间之和  

fileHead.bfOffBits=54+colorTablesize;  

//写文件头进文件  

fwrite(fileHead, sizeof(BITMAPFILEHEADER),1, fp);  

//申请位图信息头结构变量,填写信息头信息  

BITMAPINFOHEADER head;    

head.biBitCount=biBitCount;  

head.biClrImportant=0;  

head.biClrUsed=0;  

head.biCompression=0;  

head.biHeight=height;  

head.biPlanes=1;  

head.biSize=40;  

head.biSizeImage=lineByte*height;  

head.biWidth=width;  

head.biXPelsPerMeter=0;  

head.biYPelsPerMeter=0;  

//写位图信息头进内存  

fwrite(head, sizeof(BITMAPINFOHEADER),1, fp);  

//如果灰度图像,有颜色表,写入文件    

if(biBitCount==8)  

fwrite(pColorTable, sizeof(RGBQUAD),256, fp);  

//写位图数据进文件  

fwrite(imgBuf, height*lineByte, 1, fp);  

//关闭文件  

fclose(fp);  

return 1;  

}  

void main()  

{  

char inFileName[90],outFileName1[90],outFileName2[90];  

printf("请输入原始位图文件的文件名:");  

scanf("%s",inFileName);  

printf("请输入加密程序产生的新位图文件的文件名:");  

scanf("%s",outFileName1);  

printf("请输入解密程序产生的新位图文件的文件名:");  

scanf("%s",outFileName2);  

//读入指定BMP文件进内存  

readBmp(inFileName);  

//输出图像的信息  

printf("width=%d,height=%d, biBitCount=%d\n",bmpWidth,bmpHeight, biBitCount);  

//图像加密

encrypt(key);

//将加密数据存盘  

saveBmp(outFileName1, pEnBmpBuf, bmpWidth, bmpHeight, biBitCount, pColorTable);  

//图像解密

unencrypt(key);

//将解密数据存盘  

saveBmp(outFileName2, pUnBmpBuf, bmpWidth, bmpHeight, biBitCount, pColorTable);  

//清除缓冲区,pBmpBuf和pColorTable是全局变量,在文件读入时申请的空间  

delete []pBmpBuf;  

if(biBitCount==8)  

delete []pColorTable;  

}

读取BMP,使用位运算加密,你也可以自己改

dem数据的话,一般用GDAL库读取,加密的思路是类似的,最简单方法是把奇数位和偶数位的高程值置换一下

求纯C语言的加密解密算法编码(aes、DES。。。。。。)

请选择参考资料的网页

BeeCrypt 是一个包含高度优化的C语言加密库,包括MD5,SHA-等多种加密解密算法,该库是通用函数库,并与任何版权无关。符合GNU开放源码要求

点击下列连接可以直接下载源代码

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;

}

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

随着社会的发展,产品的更新速度也是越来越快,算法是方案的核心,保护开发者和消费者的权益刻不容缓,那么加密芯片在其中就扮演了重要的角色,如何选择加密芯片呢?
1.市面上加密芯片种类繁多,算法多种,加密芯片强度参差不齐,加密性能与算法、秘钥密切相关。常见的加密算法有对称算法,非对称算法,国密算法,大部分都是基于I2C、SPI或1-wire协议进行通信。加密芯片还是需要项目实际需求选择,比如对称加密算法的特点是计算量小、加密速度快、加密效率高等。
2.因为单片机软加密性能较弱且非常容易被复制,所以有了加密芯片的产生,大大增加了破解难度和生产成本。目前加密芯片广泛应用于车载电子、消费电子、美容医疗、工业控制、AI智能等行业。
3.韩国KEROS加密芯片专注加密领域十多年,高安全性、低成本,在加密保护领域受到了众多客户的高度赞扬及认可。KEROS采用先进的内置aes256安全引擎和加密功能,通过真动态数据交互并为系统中敏感信息的存储提供了安全的场所,有了它的保护电路,即使受到攻击,这些信息也可以保持安全。其封装SOP8,SOT23-6,TDFN-6集成I2C与1-wire协议满足不同应用需求。CK02AT、CK22AT、CK02AP、CK22AP支持1.8V-3.6V,256bit位秘钥长度,5bytes SN序列号,支持定制化免烧录,加密行业首选。关于c加密算法库的介绍到此就结束了,感谢大家耐心阅读。

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