openssl公钥加密私钥解密和私钥加密公钥解密

本文通过实例演示了如何使用RSA算法进行公钥加密私钥解密及私钥加密公钥解密的过程,并提供了完整的C语言代码实现。

最近在弄音视频上云,参考了腾讯云中SecretId和SecretKey,直观理解SecretKey是私钥,用于签名,然后公钥验证签名,个人理解SecretId在腾讯云系统里面有一条记录,此记录存放着公钥信息。

关于公钥,私钥,一般认为是公钥加密,私钥解密;私钥签名,公钥验签,如下所示:

生成公钥私钥
openssl genrsa -out RSAPrivateKey.pem  1024
openssl rsa -in RSAPrivateKey.pem -out RSAPublicKey.pem -pubout

公钥加密
openssl rsautl -encrypt -in hello.txt -inkey RSAPublicKey.pem -pubin -out hello.txt.encrypt
私钥解密
openssl rsautl -decrypt -in hello.txt.encrypt -inkey RSAPrivateKey.pem -out hello.txt.decrypt



私钥签名
openssl dgst -sha1 -sign RSAPrivateKey.pem -out sign.txt.signed sign.txt
公钥验签
openssl dgst -sha1 -verify RSAPublicKey.pem -signature sign.txt.signed sign.txt

关于openssl,没有提供关于私钥加密,公钥解密的命令行,但是却有相关的函数。
私钥签名本身是个加密过程,公钥验签也存在着解密过程。

rsa加密时,有六个重要的数:
质数:p
质数:q
模数:n=pq
欧拉函数:ϕ\phiϕ(n)=(p-1)
(q-1)
公钥指数e:其中e满足1<e<ϕ\phiϕ(n),并且e与ϕ\phiϕ(n)互质
私钥指数d:满足ed ≡\equiv 1(mod ϕ\phiϕ(n))

例如,取p=3,q=11,则n=33,ϕ\phiϕ(n)=20,取e=3,计算出d=7。

首先给出例子,公钥加密,私钥解密:
取明文m=2,利用加密公式me ≡\equiv c(mod n),将m=2,e=3,n=33代入公式,得到
23 ≡\equiv c(mod 33),求得密文c=8。

然后再利用解密公式cd ≡\equiv m2(mod n),将c=8,d=7,n=33代入公式,得到
87 ≡\equiv m2(mod 33),求得明文m2=2

如下是代码展示,applink.c是openssl中自带的c文件,需要将此c文件拷贝到头文件下,否则执行时会出问题。

// OpensslTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>

#ifdef __cplusplus

extern "C" {
   
   
#endif

#include <openssl/applink.c>

#ifdef __cplusplus
}

#endif

int main()
{
   
   
	// 原始明文
	unsigned char plain[256] = "hello123"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值