Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9463827
  • 博文数量: 1750
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20091
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1750)

文章存档

2024年(26)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: LINUX

2011-12-01 10:03:02

Linux内核引入了强力的加密机制,将来的应用会包括:硬件加密设备驱动、内核代码签名、硬件随机数生成器、文件系统加密等。
 
配置编译选项将加密算法作为模块编入内核
 
 
 
 
 
使用API编程
这里介绍的是使用加密API的方法,而且是运行在内核态的程序:
例1
char *Kern_Digest(const void *data, size_t count,  
        unsigned char *md, unsigned int *size, const char *name)  
{  
       struct crypto_tfm *tfm;  
       struct scatterlist sg[1];  
       tfm = crypto_alloc_tfm(name, 0);  
       sg_init_one(sg, data, count); //这里复制需要做哈希的数据   
        crypto_digest_init(tfm);  
       crypto_digest_update(tfm, sg, 1);  
       crypto_digest_final(tfm, md);  
       if (size != NULL)  
          *size = tfm->cra_digest.dia_digestsize;  
       crypto_free_tfm(tfm);  
例2
#include    
  
int len;  
char key[8];  
char result[64];  
struct crypto_tfm *tfm;  
struct scatterlist sg[2];  
  
tfm = crypto_alloc_tfm("des", 0);  
if(tfm == NULL)  
    fail();  
  
crypto_cipher_setkey(tfm, key, 8);  
  
//把需要加密的数据复制到scatterlist   
  
crypto_cipher_encrypt(tfm, sg[0], sg[0], len); //这里可以模拟输入输出   
  
crypto_free_tfm(tfm); 
以上两个例子仅示范了如何使用API,可以看到最重要的2个数据结构是: crypto_tfm 和 scatterlist
crypto_tfm类型指针tfm可以理解为指代了一个算法对象
scatterlist类型数据可以认为是这些密码算法操纵的数据对象。
同时也可以看到,API的命名很容易阅读(这也是Linux内核命名的一个特色)
这部分加密库提供的接口都在linux/crypto.h头文件中有定义,进行实验的时候需要与内核相关,这里可能要一些模块编程的补充。
阅读(4547) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~