sqlite3采用MD5和Aes联合加密技术

本文介绍了一个SQLite3数据库加密方法,通过结合MD5和AES算法,实现数据的安全存储。代码中展示了如何创建AES密钥,使用MD5进行密钥预处理,并在读写数据库页面时进行加密和解密操作。此外,还提供了重新设置加密密钥的函数。
摘要由CSDN通过智能技术生成
#include "aes/aes.h"
#include "md5/md5.h"
#include "src/sqlite3.c"


#define SQLITECRYPTERROR_PROVIDER "Cryptographic provider not available"

typedef unsigned char byte_t;


struct CryptBlock
{
    void*        pBuffer;
    int            bufSize;
    AES_KEY        key;
    int            need_key;
};

const byte_t g_ivec[] = {
    0x05,0x66,0xfa,0xa4,
    0x32,0x4f,0x1f,0xa2,
    0x34,0x67,0x33,0x9b,
    0xb6,0x7e,0x3d,0xc2
};

const byte_t g_ecount[] = {
    0xa1,0xc6,0x4a,0x74,
    0x3d,0xc7,0x8e,0x54,
    0x91,0xce,0xe3,0xbc,
    0xc2,0xa2,0xd3,0xb9
};


static void * sqlite3pager_get_codecarg(Pager *pPager)
{
  return (pPager->xCodec) ? pPager->pCodec : NULL;
}

static int create_aes_key(char* pKey,int nKey,AES_KEY* paKey)
{
    byte_t aes_key[MD5_DIGEST_LENGTH];
    MD5_CTX ctx;

    memset(aes_key,0,MD5_DIGEST_LENGTH);
    MD5_Init(&ctx);
    MD5_Update(&ctx,pKey,nKey);
    MD5_Final(aes_key,&ctx);


    return AES_set_encrypt_key(aes_key,KEY_128,paKey);

}

static void encrypt(void* data,struct CryptBlock* pBlock)
{
    size_t nPageSize = 0;
    byte_t iv[AES_BLOCK_SIZE];
    byte_t ecount_buf[AES_BLOCK_SIZE];
    int num = 0;

    if (!pBlock->need_key) return;

    memcpy(iv,
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值