在记忆中,没有ASN.1,DER,PEM或其他编码的概念。 RSA密钥对于公钥和私钥使用相同的结构。对于公钥,不使用某些字段。如果您对该领域感兴趣,请访问PKCS #1或RFC 3447。
因此,给定一个RSA*,你所需要做的就是拨打PEM_write_bio_RSAPublicKey(即使使用私钥)。您也可以使用PEM_write_RSAPublicKey(即使使用私钥)。所有读写功能请参见pem(3)。
您还可以通过RSAPublicKey_dup完成很长的路。它将采用一个准确的密钥(即,一个RSA*)并返回一个公钥(即,一个RSA*)。但大多数情况下这是不必要的一步。如果你有这个要求,把钥匙放在记忆里可能是有用的。
RSA* privKey = NULL;
RSA* pubKey = NULL;
BIGNUM* exp = NULL;
privKey = RSA_new();
ASSERT(privKey != NULL);
exp = BN_new();
ASSERT(exp != NULL);
rc = BN_set_word(exp, RSA_F4);
ASSERT(rc == 1);
rc = RSA_generate_key_ex(privKey, 1024, exp, NULL);
ASSERT(rc == 1);
pubKey = RSAPublicKey_dup(privKey);
ASSERT(pubKey != NULL);
RSA_print_fp(stdout, pubKey, 0);
if(pubKey) {
RSA_free(pubKey);
if(privKey) {
RSA_free(privKey);
if(exp) {
BN_free(exp);
的RSA_print_fp结果:
$ ./t.exe
Public-Key: (1024 bit)
Modulus:
00:c3:30:67:d9:11:59:9b:85:7a:1a:95:fa:fd:c0:
dd:cd:21:d6:41:6b:16:70:c2:57:9a:f2:d2:bd:3b:
c0:02:7b:6a:ab:7f:13:a7:53:2f:31:10:08:3a:62:
28:40:5f:82:19:23:f6:0f:78:f5:e3:e4:19:a1:b4:
73:65:35:10:db:17:28:41:42:ba:df:8c:18:3b:d8:
62:52:65:61:0e:cd:60:28:c9:75:a8:5b:46:a4:89:
db:78:89:49:87:5d:7f:ce:d0:44:c4:fd:4a:74:66:
d4:46:21:c1:89:97:28:de:43:e9:94:50:f1:36:85:
a7:ef:6c:6d:6f:5d:78:00:67
Exponent: 65537 (0x10001)
您可以添加一个调用PEM_write_RSAPublicKey:
FILE* file = fopen("rsa-pub.pem", "w");
ASSERT(file != NULL);
rc = PEM_write_RSAPublicKey(file, pubKey);
$ ./t.exe
$ cat rsa-pub.pem
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAMb2jIVcTttHRqG9szv3CFZ742l7LxnVoM6oOfQXNOwabh+GB4Srf4IA
XRcGan7cj1DShnoPw9fp3IeuAUerk3xz8yPXCw09dLwrFcsmItLVnSLoRtpHnxN5
30Wd5vKpvKTLIQnurGo05s911ukFJeGo2y2OjSnTiQcJLUdt497tAgMBAAE=
-----END RSA PUBLIC KEY-----
我正在尝试在C
中
使用WinCrypt API.我的应用程序需要密码,解密,签名和验证文件,一旦我有正确的密
钥
,我知道如何做到这一点.但我的问题实际上是,这与生成这些密
钥
的应用程序不同.我所拥有的是
PEM
格式
的文件
中
的
公
钥
和
私
钥
:-----BEGIN RSA PRIVATE KEY-----[Base64 encoded]-----END RSA PRIVATE KEY-----而且:-----...
关键是
PEM
编码.您需要剥离
PEM
页眉和页脚,然后从Base64转换回DER / BER,最后使用Crypto的BERDecodePrivateKey.在Keys and Formats下的Crypto wiki上有一些关于这个主题的阅读.下面是执行转换的代码(我不相信Stack Overflow在Crypto
中
有一个工作示例).string RSA_PRIV_KEY ="-----BEGIN R...
/* 生成
公
钥
*/
RSA* rsa = RSA_generate_key( 1024, RSA_F4, NULL, NULL);
BIO *bp = BIO_new( BIO_s_file() );
BIO_write_filename( bp, "public.
pem
" );
PEM
_write_bio_RSAPublicKey(bp, rsa);
BIO_free_all( bp );
在
公
钥
密码学(也称为非对称密码术)
中
,加密机制依赖于两个相关的密
钥
,一个
公
钥
和一个
私
钥
。
公
钥
用于加密消息,而只有
私
钥
的所有者才能解密消息。
在本教程
中
,我们将了解如何从
PEM
文件
中
读取
公
钥
和
私
钥
。
首先,我们将研究有关
公
钥
密码学的一些重要概念。然后,我们将学习如何使用纯 Java 读取
PEM
文件。
最后,我们将探索BouncyCastle库作为替代方法。
2. 概念
在开始之前,让我们先了解一些关键概念。
X.509 是定义
公
钥
证书
格式
的标准。因此,这种...
ssh .
pem
I'm reading a new chapter of The Imposter's Handbook: Season 2 that Rob and I are working on. He's digging into the internals of what's exactly in your SSH Key.
我正在阅读《冒名顶替者手册:第二季》的新篇章,我和罗伯正在共同...
RSA加密算法是一种非对称加密算法,在
公
开密
钥
加密和电子商业
中
RSA被广泛使用。我们这里使用RSA加密算法,主要用到openssl库,openssl是可以很方便加密解密的库,可以使用它来对需要在网络
中
传输的数据加密。可以使用非对称加密:
公
钥
加密,
私
钥
解密,openssl提供了对RSA的支持。
首先在将vs与openssl库配置好,然后就可以进行RSA算法对机器码进行加密了。
//需要添加的所...
1、首先产生了RSA
公
私
钥
对;
2、然后对
公
钥
私
钥
分别输出
PEM
格式
数据;
3、
格式
有
PKCS
#1和
PKCS
#8,
私
钥
分别有不带密码和带密码;
4、本测试直接printf输出
PEM
数据,没有保存文件,可根据各自需要新建文件保存。...
RSA键是对称的,您可以使用任何一个作为
私
钥
或
公
钥
,只是您选择的一个问题(但DSA键不对称).下面的程序生成两个2048位长的RSA密
钥
,然后将它们保存到文件
中
并将它们读回到内存
中
.这应该给你的想法如何做到这一点.#include #include #include #include #include #include #include #include #include const char* ...
项目需要,对c++代码
中
的几个用poenssl库实现的rsa加解密函数进行了整合。
rsa加密的public key
格式
有多种,常见的有两种,一种密
钥
头为‘-----BEGIN RSA PUBLIC KEY-----’,一种开头为‘-----BEGIN PUBLIC KEY-----’,二者分别对应rsa的
PKCS
#1和
PKCS
#8
格式
。
使用openssl库加载rsa的
公
钥
时,使用的...
rsa加密的public key
格式
有多种,常见的有两种,一种密
钥
头为‘-----BEGIN RSA PUBLIC KEY-----’,一种开头为‘-----BEGIN PUBLIC KEY-----’,二者分别对应rsa的
PKCS
#1和
PKCS
#8
格式
。
使用openssl库加载rsa的
公
钥
时,使用的函数也不同。以字符串
公
钥
为例,对
PKCS
#1
格式
的密
钥
加载使用
PEM
_read_bio_RSAPublicKey()函数,对
PKCS
#8
格式
公
钥
的加载使用
PEM
_read_bio_RSA_PUBK...