AES

头文件

#include "mln_aes.h"

模块名

aes

函数

mln_aes_init

int mln_aes_init(mln_aes_t *a, mln_u8ptr_t key, mln_u32_t bits);

描述:初始化mln_aes_t结构,该结构由调用方定义并传入。key为密钥,密钥长度与bit有关,bit分为:

  • M_AES_128128位(16字节)密钥
  • M_AES_192192位(24字节)密钥
  • M_AES_256256位(32字节)密钥

key长度必须严格与bit要求位数相等。

返回值:成功返回0,否则返回-1

mln_aes_new

mln_aes_t *mln_aes_new(mln_u8ptr_t key, mln_u32_t bits);

描述:新建并初始化mln_aes_t结构,该结构有malloc进行分配。key为密钥,密钥长度与bit有关,bit分为:

  • M_AES_128128位(16字节)密钥
  • M_AES_192192位(24字节)密钥
  • M_AES_256256位(32字节)密钥

key长度必须严格与bit要求位数相等。

返回值:成功则返回mln_aes_t结构,否则返回NULL

mln_aes_pool_new

mln_aes_t *mln_aes_pool_new(mln_alloc_t *pool, mln_u8ptr_t key, mln_u32_t bits);

描述:新建并初始化mln_aes_t结构,该结构有pool指向的内存池进行分配。key为密钥,密钥长度与bit有关,bit分为:

  • M_AES_128128位(16字节)密钥
  • M_AES_192192位(24字节)密钥
  • M_AES_256256位(32字节)密钥

key长度必须严格与bit要求位数相等。

返回值:成功则返回mln_aes_t结构,否则返回NULL

mln_aes_free

void mln_aes_free(mln_aes_t *a);

描述:释放mln_aes_t结构aa应由mln_aes_new创建而来。

返回值:无

mln_aes_pool_free

void mln_aes_pool_free(mln_aes_t *a);

描述:释放mln_aes_t结构aa应由mln_aes_pool_new创建而来。

返回值:无

mln_aes_encrypt

int mln_aes_encrypt(mln_aes_t *a, mln_u8ptr_t text);

描述:对text文本进行AES加密。注意text长度必须为128位(16字节)。密文会直接写入text内。

注意:由于这里会将密文写回参数中,因此需要确保参数内存可写性,对于只读内存会出现段错误。

返回值:成功则返回0,否则返回-1

mln_aes_decrypt

int mln_aes_decrypt(mln_aes_t *a, mln_u8ptr_t cipher);

描述:对cipher文本进行AES解密。注意cipher长度必须为128位(16字节)。明文会直接写入cipher内。

注意:由于这里会将密文写回参数中,因此需要确保参数内存可写性,对于只读内存会出现段错误。

返回值:成功则返回0,否则返回-1

示例

#include <stdio.h>
#include <stdlib.h>
#include "mln_string.h"
#include "mln_aes.h"

int main(int argc, char *argv[])
{
    mln_aes_t a;
    char p[] = "1234567890123456";//128-bit 这里如果将char p[] 改为 char *p,则字符串内存区为只读,会导致段错误
    mln_string_t s;

    if (mln_aes_init(&a, (mln_u8ptr_t)"abcdefghijklmnop", M_AES_128) < 0) {
        fprintf(stderr, "aes init failed\n");
        return -1;
    }

    mln_string_set(&s, p);
    if (mln_aes_encrypt(&a, s.data) < 0) {
        fprintf(stderr, "aes encrypt failed\n");
        return -1;
    }
    write(STDOUT_FILENO, s.data, s.len);
    write(STDOUT_FILENO, "\n", 1);

    if (mln_aes_decrypt(&a, s.data) < 0) {
        fprintf(stderr, "aes decrypt failed\n");
        return -1;
    }
    write(STDOUT_FILENO, s.data, s.len);
    write(STDOUT_FILENO, "\n", 1);

    return 0;
}

results matching ""

    No results matching ""