Libgcrypt 代码实例

原创 2016年05月31日 10:01:20
#include <gcrypt.h> 
#include <stdio.h> 
#include <stdlib.h> 
// gcc test.c -lstdc++ -lgcrypt  -I/local/include -L/local/lib -o  testout


//需要传入的值有:明文密码,盐值,迭代次数,矢量
int main(int argc, char **argv){ 


/*FILE* fin=fopen("hi.txt","rb");
FILE*fout=fopen("hien.txt","wb");*/
FILE* fin=fopen("hien.txt","rb");
FILE*fout=fopen("hienout.txt","wb");


//1.得到文件大小
fseek(fin, 0,  SEEK_END);        
int file_size=ftell(fin);
fseek(fin, 0,  SEEK_SET); 
printf("filesize=%d",file_size);


//2.明文密码加密
//
char passphrase[20]="123456";//明文秘钥
char salt[15]="*!1223*";//盐值
char retkey[100]={0};//最后返回的秘钥
int retkey_bufferLen=100;//这个大小值随便写的
gpg_error_t err = gcry_kdf_derive(passphrase, strlen(passphrase), 
GCRY_KDF_PBKDF2, GCRY_MD_SHA512,
salt, sizeof(salt), 
3,
retkey_bufferLen, retkey);



//3.得到某一加密算法的  参数
size_t key_size = gcry_cipher_get_algo_keylen(GCRY_CIPHER_AES256);
size_t block_size = gcry_cipher_get_algo_blklen(GCRY_CIPHER_AES256);
size_t block_required=file_size/block_size;


//4.根据上面的参数,准备好相应的buffer
printf("key_size=%d,block_size=%d,block_required=%d\n",key_size,block_size,block_required);
if (file_size % block_size != 0){
block_required++;
}


//4.1准备工作,,把相应参数都创建好
//根据参数创建矢量
char *iv=new char[block_size];
memset(iv,0,block_size);
memcpy(iv,"abcdef",sizeof("abcdef"));// 任意值
gcry_cipher_hd_t cipher_hd;


//创建操作句柄
gcry_error_t cipher_err=gcry_cipher_open(&cipher_hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS);
//设置传入的密码要
cipher_err=gcry_cipher_setkey(cipher_hd,retkey,key_size);//密码的大小是获取的参数
//设置传入的矢量
cipher_err=gcry_cipher_setiv(cipher_hd, iv, block_size);


//4.2把文件内容读入恰当的buf中
printf("set bufffer\n");
char *input_buf = (char*)malloc(file_size);
char *cipher_buffer = (char*)malloc(block_size*block_required);
memset(cipher_buffer, 0, block_size*block_required);
int fLen=fread(input_buf,1,file_size,fin);
printf("*******************readData=%s,readLen=%d\n",input_buf,fLen);
//将数据读入输入缓存
memcpy(cipher_buffer,input_buf,block_required*block_size);


//5.调用加密,解密函数
//加密
//cipher_err=gcry_cipher_encrypt(cipher_hd,cipher_buffer, block_required*block_size,NULL,0);
//解密
cipher_err=gcry_cipher_decrypt(cipher_hd,cipher_buffer, block_required*block_size,NULL,0);


//5.1写入输出文件
fwrite(cipher_buffer,1,block_required*block_size,fout);
gcry_cipher_close(cipher_hd);//关闭句柄
fclose(fin);
fclose(fout);

用开源加密库Libgcrypt实现AES加密

Libgcrypt是著名的开源加密软件GnuPG的底层库,是一个非常成熟的加密算法库,支持多种对称和非对称加密算法。现在自己随便造轮子地写一个加密算法程序显然是非常不安全的,虽然OpenSSL出现了H...

使用源码交叉构建libgcrypt库

使用源码交叉构建libgcrypt库

libgcrypt使用举例

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://h2appy.blog.51cto.com/609721/1022006 ...

Libgcrypt 代码实例

#include   #include   #include   // gcc test.c -lstdc++ -lgcrypt  -I/local/include -L/local/lib -...

游戏服务器端通信框架(C++与Socket)

这是一个小型多个对战的游戏服务器端代码,经过修改。 文件一:stdafx.h //-------------------------------------------------------...
  • my2005lb
  • my2005lb
  • 2013年03月18日 22:26
  • 11225

显示原理理解 DEVMODE理解

今天查找DEVMODE结构的时候找到一篇不错的文章,特转过来:显示器所显示的内容对应于显存,在显示器上最小的单位是象素(Pixel,这里仅考虑逻辑象素),显存的最小的单位是位(Bits)。 显示器工作...

libgcrypt11_1.5.3-2ubuntu4_amd64

  • 2016年12月14日 11:41
  • 232KB
  • 下载

用开源加密库Libgcrypt实现AES加密

Libgcrypt是著名的开源加密软件GnuPG的底层库,是一个非常成熟的加密算法库,支持多种对称和非对称加密算法。现在自己随便造轮子地写一个加密算法程序显然是非常不安全的,虽然OpenSSL出现了H...

用开源加密库Libgcrypt实现AES加密

Libgcrypt是著名的开源加密软件GnuPG的底层库,是一个非常成熟的加密算法库,支持多种对称和非对称加密算法。现在自己随便造轮子地写一个加密算法程序显然是非常不安全的,虽然OpenSSL出现了H...

ubuntu_libgcrypt11_1.5.3-2_amd64

  • 2017年08月19日 23:14
  • 233KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Libgcrypt 代码实例
举报原因:
原因补充:

(最多只允许输入30个字)