64b*_*uid 8 c++ openssl p2p rsa
我正在尝试使用OpenSSL中的RSA构建一个需要以下内容的p2p应用程序:
-Encryption
-Decryption
-Generating Keys (done)
-Saving and loading keys (done)
-Saving the PUBLIC key as bytes so it can be sent over the sockets
-Loading keys from the above format
Run Code Online (Sandbox Code Playgroud)
我选择使用EVP功能,无论这意味着什么.但是,我很难找到我需要使用哪些函数来执行这些操作,以及以什么顺序执行.OpenSSL的官方文档似乎不存在.
有谁知道我需要以什么顺序使用哪些功能及其原型?周围的任何示例代码也都很好.
非常感谢,提前
twitchliquid64.
PS:这是我到目前为止所拥有的
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/evp.h>
#include <openssl/objects.h>
#include <openssl/x509.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/ssl.h>
#include <openssl/engine.h>
#include <openssl/rand.h>
RSA* Generate_KeyPair(void)
{
char rand_buff[16];
EVP_PKEY *pkey = NULL;
RSA* r;
char* pass = "passgdfgf";//for now
int bits = 512; // 512, 1024, 2048, 4096
unsigned long exp = RSA_F4; // RSA_3
OpenSSL_add_all_algorithms();
RAND_seed(rand_buff, 16); //On linux: RAND_load_file("/dev/urandom", 1024);
r = RSA_generate_key(bits,exp,NULL,NULL);
if (RSA_check_key(r)!=1);;; //Check key - error out
//Create EVP to save to file.
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, r);
//Save private key
FILE* fp = fopen("private.key", "w");
PEM_write_PrivateKey(fp,pkey,EVP_aes_256_cbc(),NULL,0,NULL,pass)
fclose(fp);
//Save public key
fp = fopen("public.key", "w");
PEM_write_PUBKEY(fp, pkey);
fclose(fp);
return r;
}
EVP_PKEY* ReadPrivKey_FromFile(char* filename, char* pass)
{
FILE* fp = fopen(filename, "r");
EVP_PKEY* key = NULL;
PEM_read_PrivateKey(fp, &key, NULL, pass);
fclose(fp);
return key;
}
EVP_PKEY* ReadPubKey_FromFile(char* filename)
{
FILE* fp = fopen(filename, "r");
EVP_PKEY* key = NULL;
PEM_read_PUBKEY(fp, &key, NULL, NULL);
fclose(fp);
return key;
}
Run Code Online (Sandbox Code Playgroud)
正如我在对我的问题的评论中所说:
您会发现OpenSSL附带的示例代码比文档更有用.例如,使用RSA加密的文档显示在apps/rsa.c中.可能有助于计算OpenSSL命令行以执行您想要使用命令行工具执行的每个功能,然后找出代码实际执行的操作(通过检查它),这样您就可以使代码执行相同的操作. - 大卫施瓦茨
这个示例代码正是我所需要的,我建议任何有类似问题的人查阅rsa代码和头文件,并且它们也是文档中的小用例.
归档时间: |
|
查看次数: |
19908 次 |
最近记录: |