openssl如何生成的私钥和公钥

您所在的位置:网站首页 公钥可以生成私钥吗 openssl如何生成的私钥和公钥

openssl如何生成的私钥和公钥

2022-05-14 18:15| 来源: 网络整理| 查看: 265

首页证书相关openssl如何生成的私钥和公钥 openssl如何生成的私钥和公钥 发布日期:2017-03-15

通过openssl可以很容易生成一对私钥和公钥,注意私钥和公钥是成对出现的。

私钥:指只有自己知道的一个字符串

公钥:提供出来给大家都知道的一个字符串

关于私钥和公钥的操作分两种:1.公钥加密数据,私钥解密数据 2.私钥签名数据,公钥验证数据

我们一个一个来分析:

1.公钥加密,私钥解密

有很多朋友都想给我发信息,他们发的信息只想给我一个人看,其他人拿到这个信息是看不了的!为了满足这种需求,我们就采用公钥加密,私钥解密这种方式。

朋友们把发给我的信息用大家都知道的公钥进行加密,然后发给我,要想解密该信息就必须要公钥对应的私钥来解密该信息,但是只有我自己知道这个私钥,所以朋友们发过来的信息,就只有我一个人能够解开,也就只有我一个人可以看,因为其他人没有私钥,他们不能解密信息。

图解如下:

2.私钥签名,公钥验证

假设我想给我的一个朋友发送信息,但是可能有其他人冒充我,然后给我朋友发信息,那么我朋友就不敢确定发给他的消息到底是不是我发给他的,为了满足这种需求,就使用私钥签名,公钥验证!

我把我要发送的信息,用只有我自己知道的私钥来进行签名,就相当于在该信息上烙下一个我自己的唯一标记,其他人因为没有这个私钥,所以没有这个标记,信息签名之后,发送给好友,好友知道我这个私钥所对应的公钥,所以对发送他的信息用公钥来验证一下,验证成功,就说明这条信息就是我本人发送给他的。

图解如下:

openssl生成公钥私钥对的方法

在Java程序中,可从之前所存储的几个文件中取得密钥与加密结果来做解密。使用了BC的JCE,即bcprov-jdk14-119.jar,在使用之前,需要先安装此JCE:

 

假设JDK:jdk1.4\jre\

把BC包放到JRE下的ext:jdk1.4\jre\lib\ext

修改文件jdk1.4\jre\lib\security\java.security:

#

# List of providers and their preference orders (see above):

#

security.provider.1=sun.security.provider.Sun

security.provider.2=com.trustauth.cn.ssl.internal.ssl.Provider

security.provider.3=com.sun.rsajca.Provider

security.provider.4=com.sun.crypto.provider.SunJCE

security.provider.5=sun.security.jgss.SunProvider

 

security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider

 

======================================================================

 

C++程序源码:

 

#include

#include

#include

//#define _RSA_KEY_PAIR_GENERATE_//密钥是否要生成 只需要在第一次运行时打开此宏

 

#define _RSA_KEY_PAIR_TOFILE_//密钥对是否要写入文件

 

#define  MAX_RSA_KEY_LENGTH 512 //密钥的最大长度是512字节

 

#define PUBKEY_ENCRYPT

#define PRIKEY_DECRYPT

 

#pragma  comment(lib, “../lib/libeay32.lib”)

static const char * PUBLIC_KEY_FILE = “pubkey.key”;

static const char * PRIVATE_KEY_FILE = “prikey.key”;

 

int RsaKeyPairGen(void)

{

RSA *rsa = NULL;

 

#ifdef _RSA_KEY_PAIR_GENERATE_

//生成RSA密钥对:

rsa = RSA_new();

rsa = RSA_generate_key(1024, 0x10001, NULL, NULL);

#endif

 

//把密钥对写入文件,以后从文件里读取

#ifdef _RSA_KEY_PAIR_TOFILE_

unsigned char ucPubKey[MAX_RSA_KEY_LENGTH] = {0}, ucPriKey[MAX_RSA_KEY_LENGTH] = {0};

int len = i2d_RSAPublicKey(rsa,NULL);

unsigned char* pt = ucPubKey;

len = i2d_RSAPublicKey(rsa, &pt);

 

FILE *fpubkey = NULL;

fpubkey = fopen(PUBLIC_KEY_FILE, “wb”);

if(fpubkey == NULL)

{

cout



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3