OpenSSL库的RSA使用(上)-EVP方式

1          RSA加解密方式介绍

使用OpenSSL的RSA方式加解密有两种方式,一种是使用EVP系列函数,这些函数提供了对底层加解密函数的封装;另外一种是直接使用RSA相关的函数进行加解密操作。如果是标准应用,如使用RSA公钥加密,私钥解密,使用EVP函数比较方便,如果有特殊应用,如私钥加密,公钥解密,EVP函数会有问题,可以直接使用RSA提供的函数。

         不过OpenSSL的RSA库经过测试,发现也有些问题,最后会对这些问题进行整理总结。

注:关于OpenSSL  RSA是谁,有啥本事,去哪能找到它,请自行找度娘或谷歌。

1      EVP函数方式

1.1    步骤

使用EVP函数方式加解密的一般步骤是:

          i.             生成公钥和私钥文件(公钥文件和私钥文件都是文本)

        ii.             打开公钥,使用公钥对源数据进行加密

       iii.             打开私钥,使用私钥对密文进行解密

1.2    代码

1.2.1包含文件与宏定义

#include <stdio.h>
#include <openssl/evp.h>
#include <crypto/evp/evp_locl.h>
#include <openssl/rand.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>

#define RSA_KEY_LENGTH 1024
static const char rnd_seed[] = "string to make the random number generator initialized";

#ifdef WIN32
#define PRIVATE_KEY_FILE "f:\\rsapriv.key"
#define PUBLIC_KEY_FILE "f:\\rsapub.key"
#else   // non-win32 system
#define PRIVATE_KEY_FILE "/tmp/avit.data.tmp1"
#define PUBLIC_KEY_FILE  "/tmp/avit.data.tmp2"
#endif

#define RSA_PRIKEY_PSW "123"

#ifdef WIN32
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")
#endif

2.2.2 生成密钥文件

// 生成公钥文件和私钥文件,私钥文件带密码
int generate
  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
面向工程应用:市面上的一些密码学课程和密码学的书籍,很多都是从考证出发,讲解算法原理并不面向工程应用,而我们现在缺少的是工程应用相关的知识,本课程从工程应用出发,每种技术都主要讲解其在工程中的使用,并演示工程应用代码。 从零实现部分算法: 课程中实现了base16编解码 ,XOR对称加解密算法,PKCS7 pading数据填充算法,通过对一些简单算法的实现,从而加深对密码学的理解。理论与实践结合: 课程如果只是讲代码,同学并不能理解接口背后的原理,在项目设计中就会留下隐患,出现错误也不容易排查出问题。如果只讲理论,比如对密码学的一些研究,对于大部分从事工程应用的同学并没有必要,而是理论与实践结合,一切为了工程实践。代码现场打出: 代码不放在ppt而是现场打出,更好的让学员理解代码编写的逻辑,老师现场敲出代码正是展示出了工程项目的思考,每个步骤为什么要这么做,考虑了哪些异常,易学不枯燥: 课程为了确保大部分人开发者都学得会,理解算法原理(才能真正理解算法特性),学会工程应用(接口调用,但不局限接口调用,理解接口背后的机制,并能解决工程中会出现的问题),阅读算法源码但不实现密码算法,,并能将密码学投入到实际工程中,如果是想学习具体的加密算法实现,请关注我后面的课程。
中提到了openssl speed命令的用法。其中,-evp选项用于指定使用EVP加密算法进行性能测试。具体用法如下: openssl speed -evp [算法名称] 其中,算法名称可以是以下之一: - md2 - mdc2 - md5 - hmac - sha1 - sha256 - sha512 - whirlpool - rmd160 - idea-cbc - seed-cbc - rc2-cbc - rc5-cbc - bf-cbc - des-cbc - des-ede3 - aes-128-cbc - aes-192-cbc - aes-256-cbc - aes-128-ige - aes-192-ige - aes-256-ige - camellia-128-cbc - camellia-192-cbc - camellia-256-cbc - rc4 - rsa512 - rsa1024 - rsa2048 - rsa4096 - dsa512 - dsa1024 - dsa2048 - ecdsap160 - ecdsap192 - ecdsap224 - ecdsap256 - ecdsap384 - ecdsap512 - ecdsak163 - ecdsak233 - ecdsak283 - ecdsak409 - ecdsak571 - ecdsab163 - ecdsab233 - ecdsab283 - ecdsab409 - ecdsab571 - ecdsa - ecdhp192 - ecdhp224 - ecdhp256 - ecdhp384 - ecdhp512 - ecdhk163 - ecdhk233 - ecdhk283 - ecdhk409 - ecdhk571 - ecdhb163 - ecdhb233 - ecdhb283 - ecdhb409 - ecdhb571 - ecdh - idea - seed - rc2 - des - aes - camellia - rsa - blowfish 所以,要使用openssl speed -evp命令,只需要替换为所需的加密算法即可。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [openssl 的VC工程for openssl-1.0.0e](https://download.csdn.net/download/hello_hi_hi/3640407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [OpenSSL命令---speed](https://blog.csdn.net/as3luyuan123/article/details/16851125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值