c - 我的加密是否像 openPGP/SMIME 一样安全?

标签 c cryptography openssl

我正在尝试在一个较大的项目中编写一个简单的文件加密/解密。 由于许可证问题,我想避免使用 libgpgme。 openPGP 标准对于我的项目时间框架来说太复杂了。 我想用 openssl 做我的加密工作。

现在我已经实现了以下内容:

加密(伪代码):

RAND_bytes(aes_key)
RAND_bytes(aes_salt)

EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1(), (const unsigned char *)aes_salt, aes_key, sizeof(aes_key), 5, key, iv);

然后我aes256我的数据

EVP_EncryptInit_ex(&e_ctx, EVP_aes_256_cbc(), NULL, key, iv);

然后我用RSA加密 key 和iv

RSA_public_encrypt(flen, (unsigned char *)key, encryptedKey, rsa, RSA_PKCS1_PADDING );
RSA_public_encrypt(flen, (unsigned char *)iv, encryptedIV, rsa, RSA_PKCS1_PADDING );

然后我将 128 位 key 和 iv 保存在文件的“顶部”(256 字节 header )。

解密: -> 读取前 256 个字节(分成 key 和 iv) -> 用本地 RSA 私钥解密 key 和 iv(当然 RSA 私钥不在文件中) -> 使用 key 和iv解密数据

我对那个代码安全吗?

最佳答案

由于这是一种新格式,您应该使用 OAEP 填充。只需将 RSA_PKCS1_PADDING 更改为 RSA_PKCS1_OAEP_PADDING。您实际上不需要加密 IV(据我所知,这不会造成伤害,而且可能会有所帮助)。

否则,只要RSA_size(rsa)==16,这个方法应该没问题。当然,不能解密文件的任何人都不能知道私钥。

关于c - 我的加密是否像 openPGP/SMIME 一样安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7868754/

相关文章:

c - 尝试使用 for 循环初始化 1G 内存时访问内存崩溃

c - TCP 服务器和浏览器作为 C 中的 Web 客户端

security - 如何从多个密码生成公共(public)哈希?

java - 在另一台计算机上导出并重新导入 ECDSA 私钥后, key 会有所不同

c++ - 返回函数崩溃 - C++ Openssl

c++ - printf 函数如何工作?

文件的 Android AES-128 加密/解密非常慢。我怎样才能提高速度

macos - 弃用的 OpenSSL 功能

c - 为什么 OpenSSL EVP C 库和 Python 生成的密文不同?

python在solaris中调用外部C程序