- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
您好,我已经在我的 Linux 机器上安装了 openssl 并浏览了头文件和文档(这是非常不够的 :( )。
我正在尝试构建一个使用对称加密算法的项目(在“c”中)(我专注于 aes256cbc)。问题是我对如何在我的代码中使用库函数感到困惑。
对于我的 aes256cbc 实现,我可以直接使用“aes.h”头文件(首先出现在我面前)中定义的函数。
但是在谷歌搜索中,我遇到了一些使用“evp.h”函数来执行此操作的教程 http://saju.net.in/code/misc/openssl_aes.c.txt
这是有特定原因还是直接访问 aes.h 函数更好。
此外,如果有人可以向我指出有关使用 openssl 加密库的任何类型的良好文档/教程,我们将不胜感激。
非常感谢
P.S 如果我太天真了请原谅我
最佳答案
使用 EVP API 的优势在于,您可以以通用方式对 OpenSSL 支持的所有对称密码使用相同的 API。这使得替换所使用的算法变得更加容易,或者使算法在以后阶段可由用户配置。您编写的大部分代码并不特定于您选择的加密算法。
这是一个在 CBC 模式下使用 AES-256 加密的简单示例:
#include <stdio.h>
#include <openssl/evp.h>
int main()
{
EVP_CIPHER_CTX ctx;
unsigned char key[32] = {0};
unsigned char iv[16] = {0};
unsigned char in[16] = {0};
unsigned char out[32]; /* at least one block longer than in[] */
int outlen1, outlen2;
EVP_EncryptInit(&ctx, EVP_aes_256_cbc(), key, iv);
EVP_EncryptUpdate(&ctx, out, &outlen1, in, sizeof(in));
EVP_EncryptFinal(&ctx, out + outlen1, &outlen2);
printf("ciphertext length: %d\n", outlen1 + outlen2);
return 0;
}
为简单起见,我省略了错误处理。
IMO 关于 OpenSSL 的最重要文档之一是 Network Security with OpenSSL by Viega/Messier/Chandra .它是从 2002 年 (0.9.7) 开始的,因此不包括过去 10 年对 OpenSSL 的更改,但在我看来,与仅使用手册页相比,它仍然是一种学习 OpenSSL 的痛苦方式。
关于c - OpenSSL 使用 EVP 与算法 API 进行对称加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18261740/
我正在尝试解密使用 EVP 中的 AES_128_cbc() 加密的密文,该密文存在于名为 task3.bin 的文件中。我正在尝试进行模拟解密试验,这意味着解密未使用正确的 key 或iv,但长度有
我在使用来自 openssl/evp.h 的高级信封解密时遇到问题 当我尝试使用相同的值多次运行同一程序时,EVP_OpenFinal 和 EVP_OpenInit 随机失败。我最近 5 天都在努力,
我在 C++ 中使用 Openssl EVP。不知何故获取标签失败。 我的代码: int do_crypt(FILE *in, FILE *out){ unsigned char inbuf[
我目前正在使用 C 中的 EVP 进行一些暴力破解一些简单文本的测试。 提供了明文、密文、 key 大小、加密方法和方法论。我们只需要尝试不同的键,即已知的字典单词。 主要问题是,如果我尝试像这样直接
当我运行以下代码时,它生成一个 key ,将其写入一个字符串,打印它,将其读入 key ,然后再次打印,针对 OpenSSL_1_0_2e: #include #include #include
在将 sources.list 中的版本设置为 7.0 后,我在我的 Debian 6.0 上安装了以下软件包: libssl-dev 打开SSL openssl-common 我已经验证了 /usr
我正在尝试在小型应用程序中实现一些基本的 AES/DES 加密/解密。主要用于存储敏感的用户信息。 我看过很多C实现的例子,这正是我想要的,因为以后在Objective-C中使用它很容易,但我不能真正
我的想法是在客户端服务器模型中进行文件加密,我使用 openssl evp 进行加密。我需要将密文存储在文本文件中并将其发送给客户端。但我无法执行此操作,因为我发现密文中存在无效字符,无法存储在文件中
我正在做一项作业,我必须比较使用 C 语言中的 OpenSSL EVP 库对无碰撞 MAC 进行的暴力攻击与单向属性 MAC 的攻击。只是澄清一下,我不是寻找有关任务的任何帮助,只是执行 EVP。 我
我正在尝试使用 RSA 及其高级信封函数通过 OpenSSL 进行公共(public)加密。但是,我似乎无法理解它们,并且遇到了段错误。我项目中的这段压缩代码重现了这个问题: #include #i
亲爱的,我制作了 c++ 代码来签署消息 m_digestData[DATA_SIZE + RSA_KEY_SIZE]。这些消息最初由一些长度为 13 字节的数据和长度为 RSA_KEY_SIZE 2
我有一个 EVP 加密文件,我想通过套接字发送它。但是,我意识到没有发送任何内容,因为我将文件读入的数组中似乎没有存储任何内容,我确信其中存储了一些内容,因为我在读取此文件后能够解密。 下面的代码片段
我正在尝试使用 heartbleed 补丁 ( 1.0.1g ) 将我的网络服务器更新到最新的 openssl。我从 openssl.org 抓取了 tarball。表示通常的./configure;
我在尝试使用OpenSSL文档中的evp aes加密模板代码时遇到很多LINK错误:https://wiki.openssl.org/index.php/EVP_Symmetric_Encryptio
因此,我尝试使用椭圆曲线 DH 的 OpenSSL EVP 方法执行 key 交换,以派生共享 key 。这对于在 GCM 模式下使用 AES 为自定义协议(protocol)提供强大的安全性是必要的
我在文档中找到的所有示例都是使用公钥加密,然后使用私钥解密。 因此,我可以使用 EVP_XXX api 用公钥解密吗?或者使用公钥解密的唯一方法是使用 RSA_XXX api? 欢迎任何答案。 最佳答
过去几天我一直在尝试将 OpenSSL 与 QT 结合使用,但文档和示例很少或没有。 无论如何,我想出了这段代码: void qkCrypto::AES_CBC(const unsigned char
所以我花了几个小时浏览谷歌搜索结果和一些与 openssl 函数相关的联机帮助页,试图找出如何使用 EVP 函数和 3DES 加密。现在我的代码正在使用 中的这些函数: DES_ede2_cbc_e
我需要使用 AES-CBC 加密长期存在的网络数据流。我在想我会调用EVP_EncryptInit_ex()只需一次并保存 E VP_CIPHER_CTX用于后续调用 EVP_EncryptUpdat
我使用 android ndk build 成功编译了 openssl,并且成功构建了 .so 文件。 我正在尝试在 android 项目中“包含”构建的 .so 文件。 在下面一行中出现错误: #i
我是一名优秀的程序员,十分优秀!