自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

shaoyiwenet的专栏

CryptDB代码分析1-lua与加密库

  • 博客(19)
  • 收藏
  • 关注

原创 CryptDB代码分析5-底层加密库与加密层

CryptDB要进行数据加密,需要实现具体的加密算法,然后使用加密层类型来进行封装。如果用户想在其上实现新的功能,一方面需要实现加密算法,一方面要添加加密层以及其他相关辅助结构。本文介绍这两者之间的一些接口设计,方便大家基于现有代码做实验。加密算法CryptDB使用了AES,OPE,blowfish,Pailliar,Search算法,用到了openssl以及NTL库,相关代码全部...

2018-03-25 16:47:44 1840 1

原创 CryptDB代码分析4-加密元数据读写

之前介绍了CryptDB中元数据管理相关的类,以及这些类在MySQL中的存储格式。本文介绍这些元数据是什么时候创建的,在什么时候通过什么方式写入数据库,在什么时候被读取,以及元数据在什么地方被使用。初始化与元数据读取SchemaInfo 与 SchemaCache:上一篇文章介绍了从DatabaseMeta往下的层次化结构,用来表示元数据。实际上,还有上面这两个结构也是元数据的...

2018-03-19 15:16:01 805 3

原创 CryptDB代码分析3-元数据管理结构

本文是CryptDB代码分析的第三篇。在CryptDB中,需要对加密过程进行记录:比如某个表的原始名字和加密以后的名字,表中有多少列,每列用了什么样的加密算法。这些信息被记录在mysql-proxy端的embedded MySQL中。CryptDB使用了元数据管理的模块处理这些信息,相关代码主要位于main/dbobject.hh以及main/schema.cc。层次化的结构在介绍...

2018-03-11 20:52:55 943

原创 CryptDB代码分析2-handler与executor

之前已经介绍了SQL语句经过mysql-proxy的lua脚本与C++库交互的过程。在CryptDB的处理中,总体分为两个阶段:rewrite与next。本文介绍在rewrite和next这两个阶段中比较重要的两个类层次:handler以及executor。SQL改写方式与query恢复介绍首先考虑如何对SQL语句进行加密。CryptDB不直接处理字符串,而是借用了MySQL5.5...

2018-03-06 09:23:39 1114

原创 CryptDB代码分析1-lua与加密库

之前的文章 ”CryptDB原理概述“ 介绍了CryptDB的基本原理,接下来从代码的角度介绍其实现原理。本文首先关注mysql-proxy的lua脚本与CryptDB加密库的交互过程。前期准备在进行源码阅读和调试之前,首先需要进行CryptDB的安装。 之前已经对CryptDB在ubuntu 16.04上的安装做过介绍。也可以使用我在github上共享的项目:https://gi...

2018-02-26 14:46:24 1388

原创 Cryptdb原理概述(1)

Cryptdb[1]是MIT的CSAIL 在11年sosp上提出的, 其在数据库上实现了同态加密技术. 本文基于一些相关文献, 以及对代码的调研, 对该系统的实现原理以及相关的技术做介绍.同态加密加密是一种保证数据安全的方法, 但是数据加密以后, 对于数据进行操作就变的复杂了. 举例来说, 我对两个数字A和B进行了加密存储, 分别变成了A’和B’, 现在我们有一个计算两个数的和的需求, 也就是需要计

2017-05-02 10:25:46 8168 2

原创 如何用C++偷私有变量

最近在开源代码中发现了一种不修改代码的情况下, 访问库中的类的私有成员变量的方法. 我们知道, 一个类的成员变量设置成private, 外部函数一般通过友元才能访问. 但是库已经写好了, 在不修改库的代码, 为其添加友元的情况下, 也可以使用一些特殊技巧访问类的私有成员. 为了介绍这个方法, 首先介绍一些C++中的特性, 如下.指向成员的指针(pointer to member variable

2017-01-16 10:34:09 538

原创 MySQL的Embedded模式C接口

MySQL除了CS运行模式, 还有embedded模式. 相关文档介绍比较少,也比较散乱, 最近项目中正好用到, 现通过本文对其基本用法做个介绍,给出可以运行的基本例子.本文基于mysql5.5.环境配置要使用embedded模式的MySQL, 有两种方法, 一种是从源码编译, 一种是下载libmysqld库. 本文首先采用下载库的方法, 在ubuntu16.04上, 有如下的命令.sudo apt

2017-01-02 11:37:17 1861

原创 cscope快速教程

cscope是一种代码阅读工具, 跟ctags比, 优点是可以查询调用某个函数的有哪些函数. 本文基于参考文献, 整理其基本使用方法, 方便快速查询, 本文测试环境是Ubuntu16.04.以Redis代码为例子我们以Redis的源码为例子, 首先在Reids官网下载源码, 并且解压, 进入代码目录. 开始进入以下步骤:将源码文件名写入到cscope.files文件中find . -name

2016-12-27 08:46:41 3239

原创 linux网络编程系列-地址结构(1)

linux socket编程中经常用到各种类型的地址, 最近在一些开源代码中经常见到, 它们是进行socket编程的基础, 本文对常见的地址结构进行简单整理, 并在附录中对某些函数给出了helloworld式的测试代码, 方便查询.

2016-12-19 09:24:28 743

原创 lua与Cpp传递参数接口介绍

最近在开源代码中遇到MySQL-Proxy, 其允许lua脚本实现用户的个性化配置, lua脚本可以引用C/C++的动态链接库完成一些复杂的功能. 本文对最近接触到的lua和C/C++混合的相关接口使用做个总结. 本文的完整代码在文末的附录中, 代码测试在Ubuntu16.04+lua5.1下完成, 不同版本可能API有所变化, 可以参考文末给出的官方文档链接.相关环境配置首先, 要在C++中使用相

2016-12-12 09:13:33 891

原创 Hbase概述

本文对最近接触到Hbase相关的资料做个简单整理, 主要包含了数据模型, 底层存储结构, 以及分布式模型.Hbase是Google发表的论文Bigtable的开源实现, 文中对于BigTable和Hbase中的对应的名词在不引起歧义的情况下可能混合使用, 不做区分.

2016-12-05 08:42:45 451

原创 python的yield使用初探

最近在开源代码中遇到yield关键字, 这里对最近学习的用法做个简单记录. 本文将基于linux 的 cat命令的实现进行说明.

2016-11-28 09:22:53 1680

原创 MySQL的UDF

最近用到MySQL的UDF, 查了一下相关文献, 对用户用户实现function和Aggregate function的方法做个介绍.

2016-11-21 09:14:24 9614 1

原创 Cryptdb在Ubuntu16.04上的安装

Cryptdb是MIT的开源数据库加密层, 其实现了数据加密操作, 代码在Ubuntu12.04上进行过测试. 但是12.04对于现在来说太老了, 在Ubuntu16.04系统上直接使用脚本安装会出现各种问题, 网上现有的参考资料也比较少. 本文基于对其安装脚本的分析, 给出了Ubuntu16.04上安装的分解步骤.该方法在Ubuntu16.04上测试通过.前期准备Cryptdb的安装主要可以分为安

2016-11-14 19:24:25 2390 6

原创 多线程数据竞争问题

摘要在Redis的Bio代码中, 需要使用for循环创建两个服务线程, 并且把两个整数0 1作为参数传到线程执行的函数中. 这个问题涉及到在linux c中, 用for循环创建多个线程并传参数时会遇到的数据竞争问题. 本文给出该问题的分析, 几段相关的错误代码的分析, 并结合redis的BIO模块代码给出总结. 第一种错误的写法我们的目标是在一个for循环里面,调用pthread_create函数创

2016-11-09 17:09:37 4182 1

原创 Redis的BIO系统

Redis通过bio系统完成两件事,一是进行Aof持久化,也就是将写入到系统的page cache的数据fsync到磁盘中;二是关闭文件。为了完成这件任务,其采用了任务队列的方式,每个任务都是一个线程来完成,任务会被放到任务队列中,然后由执行任务线程取走,如果队列空,则阻塞等待,如果队列里有任务,就通知工作线程,这通过条件变量来实现。后面以任务初始化,任务放入队列,任务出队列三个方面进行介绍,并且以

2016-11-05 19:14:43 1088

原创 条件变量与锁

本文以linux c为例子, 介绍锁和共享变量的基本使用方法, 并介绍一个基于条件变量实现生产者消费者模型的例子, 然后在文末给出相关书籍的参考. 锁多线程情况下, 锁的使用主要涉及以下5个函数, 它们都包含在pthread.h头文件中.pthread_mutex_init(pthread_mutex_t * mutex,const pthread_mutexattr_t *attr)pthr

2016-11-05 19:12:12 549

原创 Redis集群搭建方法以及脚本搭建

摘要本文讲述了Redis集群搭建的基本方法, 然后给出一个使用一键配置的脚本搭建redis集群的方法.

2016-10-05 11:12:24 572

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除