本文假设你已经安装好了OpenSSL,并且持有一份1.1.1的源码。
AES相关的头文件在aes.h中、源文件在crypto/aes目录中。
这里定义了加密和解密的类型。
这里定义了分组最大轮数和块大小。
这个结构定义了AES的密钥上下文。相关字段含义:
rd_key —— 每轮的子密钥。
rounds —— 加解密轮数。
在1.1.1中,大多数的数据结构已经不再向使用者开放,从封装的角度来看,这是更合理的。如果你在头文件中找不到结构定义,不妨去源码中搜一搜。
int AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key)
设置加密密钥,bits必须是128、192、256,否则会失败。
成功返回0,失败返回负数。
int AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key)
设置解密密钥,bits必须是128、192、256,否则会失败。
成功返回0,失败返回负数。
void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key)
执行AES ECB分组加密。
void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key)
执行AES ECB分组解密。
void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc)
执行AES ECB分组加解密。其实是AES_encrypt()和AES_decrypt()的简单封装。
其内部实现为:
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t length,
const AES_KEY *key, unsigned char *ivec, const int enc)
执行AES CBC分组加解密。
ivec为16字节的向量,每次加解密都需要,首次为初使向量,后续为前一次的密文分组。
其内部实现为:
下面这个例子演示了AES ECB分组加解密的基本用法。在实际项目中,需要程序员加以封装,并充分考虑数据填充问题。
输出:
AES_set_encrypt_key ret:0
AES_set_decrypt_key ret:0
6dac1c56e747fae03acf8c6891e428e0
31323334353637383132333435363738
哥门 <openssl/aes.h>里 的openssl只是文件夹名字而已,在linux下面 /usr/local/include/ /usr/include/ 这两个路径是默认引用的。
所以你没加 -I 也是可以编译的 。
当交叉编译时,那就完全不一样了,必须配置好所有路径。
其压缩率比高,3.x 采用了更先进的压缩算法,是现在压缩率较大、压缩速度较快的格式之一。 3.3 增加了扫描压缩文件内病毒、解压缩“增强压缩” ZIP 压缩文件的功能, 升级了分
卷压缩的功能等。
主要特点:1、 对 RAR 和 ZIP 的完全支持;
2、 支持 ARJ、CAB、LZH、ACE、TAR、GZ、UUE、BZ2、JAR、ISO 类型文件的解压;
3、 多卷压缩功能;
4、 创建自解压文件,可以制作简单的安装程序,使用方便;
5、 压缩文件大小可以达到 8,589,934 TB;
6、 锁定和强大的数据恢复记录功能,对数据的保护无微不至,新增的恢复卷的使用功能更强大;
7、 强大的压缩文件修复功能,最大限度恢复损坏的 rar 和 zip 压缩文件中的数据,如果设置了恢复记录,甚至可能完全恢复;
8、 支持用户身份校验(AV 校验,必须注册);
9、 强大简易的备份功能;
10、工业标准 AES 加密;
11、提供固实格式的压缩算法,在很大程度上增加类似文件或许到小文件的压缩率;
12、在压缩前估计文件的压缩率的功能;
13、可以保存 NTFS 数据流和安全数据;
14、与资源管理器整合, *** 作简单快捷;
15、支持 Unicode 编码文件名;
16、强大的常规、文本、多媒体和可执行文件压缩。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)