使用openssl库进行AES算法的加密

使用openssl库进行AES算法的加密

介绍

最近维护一个插件,需要添加一个小的功能,希望能够对用户的密码进行加密保存到文件中,然后再从文件中提取出加密后的数据,并进行解密。

功能很简单,目前也有着许多的开源库包含了各种各样的加密算法。这里我采用了openssl库中的AES加密算法。

原本以为这个实现会很容易,但是最后还是出现了一些小的问题,记录下来做一个备份。

问题:

其中出现的最主要的问题就是,我们是从一个xml配置文件中读取用户密码,最初是以明文存储的。但是我们利用AES加密算法后,将加密数据写回到文件中,却总是无法正常的再次读取出来。当时我考虑的是,加密后的数据基本上都是乱码的数据,所以在输出文件的时候按照字节流进行输出,xml读取的时候读取出原来加密后的字节流就可以完成解密了。

但是,结果并不理想,先不说每次输出文件的时候需要按照字节流进行输出,就会给编程带来一定的复杂。除此之外,xml读取的时候也并不能很好的读取。究其根本,xml主要面向是文本文件的,当时采用的是tinyXML来进行文本的读取,所以希望面向文本文件的提取函数提取二进制流就有些强人所难了。

后来就考虑另外一个问题,我们把加密后的数据进行直接转换成合法的ascii码应该就可以了,当时考虑的是将每个字节的内容直接按照十六进制的值输出到文件内。但是突然想起俩base64编码,它本来就是完成这个功能的。

关于Base64编码

Base64是一种用64个字符来表示任意二进制数据的方法。

只有一个字节的值在0~127是合法的ASCII码。对于不合法的数据,我们就会看到各种乱码。比如对于jpg,pdf等文件,用记事本打开会看到一大堆乱码。
是因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。

Base64是一种最常见的二进制编码方法。

我们将原来的二进制数据进行Base64编码之后,在存储到文本文件中,就不会出现乱码的问题,xml文件也能够很好的提取出来编码后的数据,在解密之前,我们只需要将xml中提取到的数据先进行Base64的解码然后再进行AES算法的解密就可以完美解决问题了。

代码示例

#include <string>
#include <iostream>
#include <fstream>
#include <assert.h>
#include <openssl/aes.h>
#include <openssl/evp.h>

using namespace std;

const 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值