使用linux内核2.6.18,尝试加密

时间:2015-05-29 10:09:29

标签: c linux encryption linux-kernel

我似乎无法理解crypto api是如何工作的。我查看了有关消化密码的示例和文档,但我仍然非常困惑。

内核空间中的

...
unsigned char key[16] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
        0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; //# used as key
struct crypto_tfm *tfm;
struct scatterlist sg;
...
static ssize_t go_encrypt_write(struct file *filp, char *buffer,
                        size_t length, loff_t *offset)
{
    osprd_info_t *d = file2osprd(filp);
    uint8_t *tmp = kmalloc(sizeof(uint8_t), GFP_ATOMIC);
    struct scatterlist sg;
    copy_from_user(tmp, buffer, length);
    tfm = crypto_alloc_tfm("aes", 0);
    crypto_cipher_setkey(tfm, key, 16);
    sg_set_buf(&sg, tmp, length);
    crypto_cipher_encrypt(tfm, &sg, &sg, length);
    memcpy(d->data, tmp, length);
    return length;
}

基本思想是我想将缓冲区从用户空间(字符串)复制到加密的内核空间。

由于我不能直接访问内核空间中的用户空间,我必须使用copy_from_user。从这里开始我将我的变换设置为使用aes算法。然后我设置一个长度为16的硬编码密钥。然后我从用户空间的缓冲区中设置一个分散列表。那么当我加密sg时,此时不应该'tmp'加密?

当我稍后阅读时,我仍然得到没有加密的原始字符串。我究竟做错了什么?谢谢。

0 个答案:

没有答案