天天看点

C++密钥生成和数据加密

1、最近在学习加密相关的东西,在这里将自己用到的密钥生成算法和加密算法记录下来

2、密钥生成算法:ed25519

使用ed25519公钥签名系统生成签名,密钥,向量iv

3、加密算法:这里使用openssl aes-cbc进行数据的加密

4、流程

C++密钥生成和数据加密

5、数据加密和解密

在数据加密和解密的时候遇到一个问题,就是aes-cbc算法加解密的数据长度必须是key的整数倍,在上面我们生成的key大小是16字节,当然也可以生成64字节的key。如果数据长度不满16的整数倍,有两个方法可以解决,第一个方法就是多余的数据不加密,第二个方法就是多余的数据先进行base64编码,并且将长度补充到32个字节,补充等号(=),然后在对数据进行加密,解密的时候将数据包的最后32个字节多余的等号去掉。当然,第一种方法比较简单。

6、为什么将多余的数据进行base64编码后还要将数据长度补充位32个字节

因为base64编码是将3个字节编码后会成为4个字节,那么多余的数据长度最多是15个字节,base64编码后是20个字节,最少1个字节,base64编码后是4个字节,总之不会超过32个字节,我们将其补充位32个字节后,就默认最后32个字节肯定是base64编码的,不然不知道是最后16个字节还是最后32个字节是base64编码的