当前位置: 首页 > 面试题库 >

使用EVP与算法API进行对称加密的OpenSSL

罗甫
2023-03-14
问题内容

嗨,我已经在我的linux机器上安装了openssl,并通过了头文件和文档(这是非常不充分的:()。

我正在尝试建立一个使用对称加密算法的项目(在“ c”中)(我专注于aes256cbc)。问题是我很困惑如何在代码中使用库函数。

对于我的aes256cbc的实现,我可以直接使用在“ aes.h”头文件中定义的功能(此文件首先出现在我的头上)。

但是在谷歌搜索时,我遇到了一些有关此问题的教程,这些html" target="_blank">教程使用“
evp.h”功能执行此操作http://saju.net.in/code/misc/openssl_aes.c.txt

是否有特定原因,或者直接访问aes.h函数更好。

而且,如果有人可以向我提供有关使用openssl密码库的任何形式的良好文档/教程,将不胜感激。

非常感谢

PS如果我天真,请原谅我


问题答案:

使用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的最重要的文档之一是Viega / Messier / Chandra撰写的Network Security with
OpenSSL
。它是从2002年(0.9.7)起发布的,因此不涉及最近10年内对OpenSSL的更改,但是与仅使用手册页相比,IMO仍然是学习OpenSSL的一种更轻松的方法。



 类似资料:
  • 本文向大家介绍Android对称加密与非对称加密,包括了Android对称加密与非对称加密的使用技巧和注意事项,需要的朋友参考一下 凯撒密码 1. 介绍 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3 的时候,所有的字母

  • 本文向大家介绍C#对称加密与非对称加密实例,包括了C#对称加密与非对称加密实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#对称加密与非对称加密的原理与实现方法,分享给大家供大家参考。具体分析如下: 一、对称加密(Symmetric Cryptography) 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secr

  • 我试图创建一个Android应用程序,它可以动态加密数据并将其写入存储。已经实现了没有加密的应用程序,在stackoverflow上查看了100个加密示例/帖子,但无法决定使用哪种方法。 一开始想到使用AES,就在谷歌上搜索它的安全性。每次输入16或32个字符(我希望安全性更好)的密码似乎并不方便。作为一种替代的非对称加密方式,人们想到了。用一个密钥加密,用另一个密钥解密,这样我就可以将用于加密的

  • 本文向大家介绍Java实现的对称加密算法AES定义与用法详解,包括了Java实现的对称加密算法AES定义与用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现的对称加密算法AES定义与用法。分享给大家供大家参考,具体如下: 一 简介 1、AES是目前使用最多的对称加密算法。 2、AES的优势之一是至今尚未被破解。 3、AES通常用于移动通信系统加密以及基于SSH协议(SSH

  • 本文向大家介绍Java实现的对称加密算法3DES定义与用法示例,包括了Java实现的对称加密算法3DES定义与用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现的对称加密算法3DES定义与用法。分享给大家供大家参考,具体如下: 一 为什么出现3DES 1、返回柯克霍夫原则 2、存在安全问题 二 3DES(Triple DES或DESede)好处 1、密钥长度增强 2、迭代

  • 本文向大家介绍Python使用MD5加密算法对字符串进行加密操作示例,包括了Python使用MD5加密算法对字符串进行加密操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python使用MD5加密算法对字符串进行加密操作。分享给大家供大家参考,具体如下: 输出结果: gxbdb684f1b8cfdf046744ea96d9fce48469fbac305dc6aa0d6operato