Crypto++是一个免费的加解密类库,集成了很多的加解密算法,如des, aes, rsa等基础加密算法。本文主要谈一下本人最近实现的一个密码管理器,编译环境是32位Ubuntu,主要实现了多用户系统,可以创建用户、创建完成之后将密码经过HMAC存入用户文件、用户登录后需要对用户文件进行完整性检测保证外部修改、添加删除修改查看密码记录、记录以(域名、aes加密后密码、前两者结合的HMAC)形式存入文件。
程序架构
由于管理器采用终端显示设计,就是说不同的代码段会不停地被调用。如果程序设计得不好的话,容易造成函数的嵌套调用,甚至栈空间无法释放,内存泄露等问题。为了避免这个问题,使用函数指针来规划整一个程序,有点像回调函数的感觉。整个管理器在运行时维护一个函数指针,每一次的函数调用都由这个指针来指定,而且保证每一个函数都执行完毕,避免函数变量占用栈空间。
typedef void (*func)();<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
以上代码定义了一个指针类型func,该指针类型可以指向一个返回值为void、0个参数的函数。因此,定义的功能函数中,都需要保证符合这一指针类型。
整体流程: