【发布时间】:2014-06-29 06:44:04
【问题描述】:
目前在我的项目中,我需要加密一个可变大小(大约 1 到 1.5 GB)的大文件
我正在使用 openssl 项目中的 aes 算法。但我没有使用整个库,而只是使用一些从“密码”生成密钥并使用这些密钥加密 128 字节的固定块的函数
总之,
void aes_encrypt(char* in, char* out , AES_KEY ekey);
void aes_decrypt(char* in, char* out , AES_KEY dkey);
现在的主要问题是这些函数只能使用 128 字节的块大小。
所以我必须编写一个包装函数,它将我的文件分成 128 字节的块,并将其提供给这些加密/解密例程。
所以我的问题是,
- 在我的包装器中,我如何处理文件大小不是 128的整数倍
- 我是否需要用 0 填充加密文件以使倍数为
- 如果是这种情况,我如何识别我所做的零填充量,因为我知道只需删除 0 的最后一位 从一个文件,可能会导致文件失去完整性,特别是如果 该文件恰好在末尾包含一个 0。
- 在加密文件前附加标头是否更好? 包含文件的大小信息,可能还有它的 校验和。
谢谢。
ps:我是加密新手(尤其是 AES)
【问题讨论】:
-
除非这是关于学习 AES,否则您应该真正使用
EVP_更高级别的函数。如果您不能(因为运行时间极其有限?),您可以随时尝试复制EVP_功能的行为。特别是如果您只是使用 AES 而不知道如何首先执行加密 - 即使EVP_也不会保护您免受诸如“......在文件中失去完整性......”之类的想法。 -
谢谢,我一定会用EVP_
标签: c encryption cryptography aes