OpenSSL
安装
# yum -y install openssl
# yum -y install openssl-devel
一些有关PEM(PEM_read)的代码
typedef void bio_info_cb(struct bio_st *, int, const char *, int, long, long);
struct crypto_ex_data_st { STACK_OF(void) *sk; int dummy; /* gcc is screwing up this data structure :-( */ };
typedef struct crypto_ex_data_st CRYPTO_EX_DATA;
struct bio_st { BIO_METHOD *method; /* bio, mode, argp, argi, argl, ret */ long (*callback)(struct bio_st *,int,const char *,int, long,long); char *cb_arg; /* first argument for the callback */ int init; int shutdown; int flags; /* extra storage */ int retry_reason; int num; void *ptr; struct bio_st *next_bio; /* used by filter BIOs */ struct bio_st *prev_bio; /* used by filter BIOs */ int references; unsigned long num_read; unsigned long num_write; CRYPTO_EX_DATA ex_data; };
typedef struct bio_st BIO; |
typedef struct bio_method_st { int type; const char *name; int (*bwrite)(BIO *, const char *, int); int (*bread)(BIO *, char *, int); int (*bputs)(BIO *, const char *); int (*bgets)(BIO *, char *, int); long (*ctrl)(BIO *, int, long, void *); int (*create)(BIO *); int (*destroy)(BIO *); long (*callback_ctrl)(BIO *, int, bio_info_cb *); } BIO_METHOD; |
static int MS_CALLBACK file_gets(BIO *bp, char *buf, int size) { int ret=0;
buf[0]='\0'; if (bp->flags&BIO_FLAGS_UPLINK) { if (!UP_fgets(buf,size,bp->ptr)) goto err; } else { if (!fgets(buf,size,(FILE *)bp->ptr)) goto err; } if (buf[0] != '\0') ret=strlen(buf); err: return(ret); } |
static BIO_METHOD methods_filep= { BIO_TYPE_FILE, "FILE pointer", file_write, file_read, file_puts, file_gets, file_ctrl, file_new, file_free, NULL, }; |
BIO_METHOD *BIO_s_file(void) { return(&methods_filep); } |
BIO *BIO_new(BIO_METHOD *method) { BIO *ret=NULL;
ret=(BIO *)OPENSSL_malloc(sizeof(BIO)); if (ret == NULL) { BIOerr(BIO_F_BIO_NEW,ERR_R_MALLOC_FAILURE); return(NULL); } if (!BIO_set(ret,method)) { OPENSSL_free(ret); ret=NULL; } return(ret); } |
long BIO_ctrl(BIO *b, int cmd, long larg, void *parg) { long ret; long (*cb)(BIO *,int,const char *,int,long,long);
if (b == NULL) return(0);
if ((b->method == NULL) || (b->method->ctrl == NULL)) { BIOerr(BIO_F_BIO_CTRL,BIO_R_UNSUPPORTED_METHOD); return(-2); }
cb=b->callback;
if ((cb != NULL) && ((ret=cb(b,BIO_CB_CTRL,parg,cmd,larg,1L)) <= 0)) return(ret);
ret=b->method->ctrl(b,cmd,larg,parg);
if (cb != NULL) ret=cb(b,BIO_CB_CTRL|BIO_CB_RETURN,parg,cmd, larg,ret); return(ret); } |
#define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp) |
int BIO_gets(BIO *b, char *in, int inl) { int i; long (*cb)(BIO *,int,const char *,int,long,long);
if ((b == NULL) || (b->method == NULL) || (b->method->bgets == NULL)) { BIOerr(BIO_F_BIO_GETS,BIO_R_UNSUPPORTED_METHOD); return(-2); }
cb=b->callback;
if ((cb != NULL) && ((i=(int)cb(b,BIO_CB_GETS,in,inl,0L,1L)) <= 0)) return(i);
if (!b->init) { BIOerr(BIO_F_BIO_GETS,BIO_R_UNINITIALIZED); return(-2); }
i=b->method->bgets(b,in,inl);
if (cb != NULL) i=(int)cb(b,BIO_CB_GETS|BIO_CB_RETURN,in,inl, 0L,(long)i); return(i); } |
int PEM_read_bio(BIO *bp, char **name, char **header, unsigned char **data, long *len) { EVP_ENCODE_CTX ctx; int end=0,i,k,bl=0,hl=0,nohead=0; char buf[256]; BUF_MEM *nameB; BUF_MEM *headerB; BUF_MEM *dataB,*tmpB;
nameB=BUF_MEM_new(); headerB=BUF_MEM_new(); dataB=BUF_MEM_new(); if ((nameB == NULL) || (headerB == NULL) || (dataB == NULL)) { BUF_MEM_free(nameB); BUF_MEM_free(headerB); BUF_MEM_free(dataB); PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); return(0); }
buf[254]='\0'; for (;;) { i=BIO_gets(bp,buf,254);
if (i <= 0) { PEMerr(PEM_F_PEM_READ_BIO,PEM_R_NO_START_LINE); goto err; }
while ((i >= 0) && (buf[i] <= ' ')) i--; buf[++i]='\n'; buf[++i]='\0';
if (strncmp(buf,"-----BEGIN ",11) == 0) { i=strlen(&(buf[11]));
if (strncmp(&(buf[11+i-6]),"-----\n",6) != 0) continue; if (!BUF_MEM_grow(nameB,i+9)) { PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); goto err; } memcpy(nameB->data,&(buf[11]),i-6); nameB->data[i-6]='\0'; break; } } hl=0; if (!BUF_MEM_grow(headerB,256)) { PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); goto err; } headerB->data[0]='\0'; for (;;) { i=BIO_gets(bp,buf,254); if (i <= 0) break;
while ((i >= 0) && (buf[i] <= ' ')) i--; buf[++i]='\n'; buf[++i]='\0';
if (buf[0] == '\n') break; if (!BUF_MEM_grow(headerB,hl+i+9)) { PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); goto err; } if (strncmp(buf,"-----END ",9) == 0) { nohead=1; break; } memcpy(&(headerB->data[hl]),buf,i); headerB->data[hl+i]='\0'; hl+=i; }
bl=0; if (!BUF_MEM_grow(dataB,1024)) { PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); goto err; } dataB->data[0]='\0'; if (!nohead) { for (;;) { i=BIO_gets(bp,buf,254); if (i <= 0) break;
while ((i >= 0) && (buf[i] <= ' ')) i--; buf[++i]='\n'; buf[++i]='\0';
if (i != 65) end=1; if (strncmp(buf,"-----END ",9) == 0) break; if (i > 65) break; if (!BUF_MEM_grow_clean(dataB,i+bl+9)) { PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); goto err; } memcpy(&(dataB->data[bl]),buf,i); dataB->data[bl+i]='\0'; bl+=i; if (end) { buf[0]='\0'; i=BIO_gets(bp,buf,254); if (i <= 0) break;
while ((i >= 0) && (buf[i] <= ' ')) i--; buf[++i]='\n'; buf[++i]='\0';
break; } } } else { tmpB=headerB; headerB=dataB; dataB=tmpB; bl=hl; } i=strlen(nameB->data); if ( (strncmp(buf,"-----END ",9) != 0) || (strncmp(nameB->data,&(buf[9]),i) != 0) || (strncmp(&(buf[9+i]),"-----\n",6) != 0)) { PEMerr(PEM_F_PEM_READ_BIO,PEM_R_BAD_END_LINE); goto err; }
EVP_DecodeInit(&ctx); i=EVP_DecodeUpdate(&ctx, (unsigned char *)dataB->data,&bl, (unsigned char *)dataB->data,bl); if (i < 0) { PEMerr(PEM_F_PEM_READ_BIO,PEM_R_BAD_BASE64_DECODE); goto err; } i=EVP_DecodeFinal(&ctx,(unsigned char *)&(dataB->data[bl]),&k); if (i < 0) { PEMerr(PEM_F_PEM_READ_BIO,PEM_R_BAD_BASE64_DECODE); goto err; } bl+=k;
if (bl == 0) goto err; *name=nameB->data; *header=headerB->data; *data=(unsigned char *)dataB->data; *len=bl; OPENSSL_free(nameB); OPENSSL_free(headerB); OPENSSL_free(dataB); return(1); err: BUF_MEM_free(nameB); BUF_MEM_free(headerB); BUF_MEM_free(dataB); return(0); } |
int PEM_read(FILE *fp, char **name, char **header, unsigned char **data, long *len) { BIO *b; int ret;
if ((b=BIO_new(BIO_s_file())) == NULL) { PEMerr(PEM_F_PEM_READ,ERR_R_BUF_LIB); return(0); } BIO_set_fp(b,fp,BIO_NOCLOSE); ret=PEM_read_bio(b, name, header, data,len); BIO_free(b); return(ret); } |
RSA加密和解密
// test.cpp
//
// @author ada
// @version 1.0 2015-01-10
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<openssl/rsa.h>
#include<openssl/pem.h>
#include<openssl/err.h>
extern "C"
{
#include "openssl/applink.c"
}
#pragma comment(lib, "libeay32.lib")
#define FILE_KEY "test.key"
#define FILE_PUBLIC_KEY "test_pub.key"
#define BUFFSIZE 1024
RSA* RSA_key();
void RSA_key_write_RSAPrivateKey(const char* fn, RSA* rsa);
RSA* RSA_key_read_RSAPublicKey(RSA* rsa);
void RSA_public_key_write_RSAPublicKey(const char* fn, RSA* rsa);
char * encrypt_with_key(char *str, char *key);
char * encrypt_with_fn(char *str, char *fps);
char * encrypt_with_fp(char *str, FILE* fp);
char * decrypt_with_key(char *s, char *k);
char * decrypt_with_fn(char *str,char *fps);
char * decrypt_with_fp(char *str, FILE* fp);
int _tmain(int argc, _TCHAR* argv[])
{
RSA *rsa = NULL, *rsa_pk = NULL;
char *source="this is plain text!";
char *ptr_en, *ptr_de;
printf("plain text: %s\n", source);
// RSA KEY TO GENERATE
rsa = RSA_key();
// WRITE RSA KEY TO FILE
RSA_key_write_RSAPrivateKey("www.yhd.com-g.key", rsa);
// READ PUBLIC KEY FROM RSA KEY
rsa_pk = RSA_key_read_RSAPublicKey(rsa);
// WRITE PUBLIC KEY TO FILE
RSA_public_key_write_RSAPublicKey("www.yhd.com-g.pub.key", rsa_pk);
char* key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAiZZSPEZHVnlnx6pRKEZdBP99\nGKaMikoABg2dLsMUk/zOxXLTpduuZNLxBicXLR9z7CCjUPfghFcclrWR5+hyZoAV\n0xOCd6YF9I9I7OL5Fj/GiTTjmuEm9uBxeQz6u2zl843DnDw8vwfZY+FQBDBRYic9\n+F1xPYRCQG6Hd9x9twIDAQAB\n-----END PUBLIC KEY-----\n";
ptr_en = encrypt_with_key(source, key);
printf("encrypt text: %s\n", ptr_en);
ptr_en = encrypt_with_fn(source, FILE_PUBLIC_KEY);
printf("encrypt text: %s\n", ptr_en);
FILE *file;
if((file = fopen(FILE_PUBLIC_KEY, "r")) != NULL) {
ptr_en = encrypt_with_fp(source, file);
printf("encrypt text: %s\n", ptr_en);
}
char* pk = "-----BEGIN RSA PRIVATE KEY-----\nMIICXgIBAAKBgQDAiZZSPEZHVnlnx6pRKEZdBP99GKaMikoABg2dLsMUk/zOxXLT\npduuZNLxBicXLR9z7CCjUPfghFcclrWR5+hyZoAV0xOCd6YF9I9I7OL5Fj/GiTTj\nmuEm9uBxeQz6u2zl843DnDw8vwfZY+FQBDBRYic9+F1xPYRCQG6Hd9x9twIDAQAB\nAoGBAL9Cbc73DSEkZ6mOEERaa7tPkbRk3l1RqjznxnJT13oDn+iO/4f7hIRyp5DB\n+ebt7gark6hocDPZgudlVqy/4Ii6x6cYtW0hObcLig0+UrQJJG8huLj4Fp0mzcIf\nxAh90Bs0GeVEUp3K0FyMUL0+MT+VBnTHOnmizTIqCIJK3Z+RAkEA5AUqcyjneRsP\nRHq9k1IKK9RjiHKbV1fyF6TZGN+cE9pF8Zlbnv/3PFjBL8j+m6qSAjVD7ftaLprO\na5cQX/aW/QJBANgpy/hQcc4P7dXRbMddILsGkc/1sr078KQkgk8+gXK2aamdi1z8\nt6bCGQ7d6te1wPxnLvBgv+vpSJRJWdbt18MCQQCLG5OwOe4tdhK0ZmUtcUl/P82R\nOsoGWUL6pblEcXbYrbsqD7NTpzj/+e2x519dPIxjCHfuwf9cm1j/TmPRB7FJAkAR\n4+OtuXqxwz+74olONrbuw6xtubgBUWSpMRxX0qSECfTUxOUz3PaWJppMULGPCMvg\nF+oamudHbxdCro9w6l5hAkEAmzgmluE0SmFMvJ1jujflVGvIUKtwqQvyNg/qcCSj\nqhu+VTIyp//q/fwW5+U2JoVkx+IaIqzS8g0aDQHS0WPd+Q==\n-----END RSA PRIVATE KEY-----";
ptr_de = decrypt_with_key(ptr_en, pk);
printf("decrypt text(plain text): %s\n", ptr_de);
ptr_de = decrypt_with_fn(ptr_en, FILE_KEY);
printf("decrypt text(plain text): %s\n", ptr_de);
if((file = fopen(FILE_KEY, "r")) != NULL) {
ptr_de = decrypt_with_fp(ptr_en, file);
printf("decrypt text(plain text): %s\n", ptr_de);
}
if(ptr_en != NULL) {
free(ptr_en);
}
if(ptr_de != NULL) {
free(ptr_de);
}
return 0;
}
void RSA_key_write_RSAPrivateKey(const char* fn, RSA* rsa) {
FILE *fp = NULL;
fp = fopen(fn, "w");
if (fp == NULL) {
fprintf(stderr,"%s open error", fn);
}
printf("file %s opened...\n", fn);
PEM_write_RSAPrivateKey(fp, rsa, NULL, NULL, 512, NULL, NULL);
fclose(fp);
}
RSA* RSA_key_read_RSAPublicKey(RSA* rsa) {
BIO *bio = NULL;
RSA* pk = NULL;
bio = BIO_new(BIO_s_mem());
PEM_write_bio_RSAPublicKey(bio, rsa);
if((pk = PEM_read_bio_RSAPublicKey(bio, NULL, NULL, NULL))==NULL) {
ERR_print_errors_fp(stdout);
return NULL;
}
return pk;
}
void RSA_public_key_write_RSAPublicKey(const char* fn, RSA* rsa) {
FILE* fp = NULL;
fp = fopen(fn, "w");
if (fp == NULL) {
fprintf(stderr,"%s open error", fn);
return;
}
printf("file %s opened...\n", fn);
PEM_write_RSAPublicKey(fp, rsa);
fclose(fp);
}
RSA* RSA_key() {
RSA* rsa = NULL; // RSA_new();
// BIGNUM * e = BN_new();
unsigned long ue = RSA_3;
printf("RSA_generate_key\n");
rsa = RSA_generate_key(1024, ue, NULL, NULL);
printf("RSA_generate_key return\n");
//int rt = RSA_generate_key_ex(rsa, 1024, e, NULL);
//unsigned long error = ERR_get_error();
//printf("error: %ld\n", error);
return rsa;
}
char *encrypt_with_key(char *str, char *key) {
// read public key from the specific string -- with char * from memory
#undef OPENSSL_NO_BIO
BIO *bio = NULL;
RSA *p_rsa = NULL;
int flen, rsa_len;
char *p_en = NULL;
if ((bio = BIO_new_mem_buf(key, -1)) == NULL) // read public key from string
{
perror("BIO_new_mem_buf failed!");
}
if((p_rsa = PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL))==NULL) {
ERR_print_errors_fp(stdout);
return NULL;
}
flen = strlen(str);
rsa_len = RSA_size(p_rsa);
p_en = (char *) malloc(rsa_len + 1);
memset(p_en, 0, rsa_len + 1);
if(RSA_public_encrypt(rsa_len, (unsigned char *) str, (unsigned char *) p_en, p_rsa, RSA_NO_PADDING) < 0) {
return NULL;
}
BIO_free(bio);
RSA_free(p_rsa);
return p_en;
}
// encript string with the specific key
// #str the string to be encript
// #fps the file name of key
char *encrypt_with_fn(char *str, char *fps) {
char *p_en = NULL;
FILE *file;
if((file = fopen(fps, "r")) == NULL) {
perror("open key file error");
return NULL;
}
p_en = encrypt_with_fp(str, file);
fclose(file);
return p_en;
}
char *encrypt_with_fp(char *str, FILE* fp) {
RSA *p_rsa = NULL;
int flen, rsa_len;
char *p_en = NULL;
// PEM_read_RSA_PUBKEY:
// DECLARE_PEM_rw(RSA_PUBKEY, RSA)
//
// #define DECLARE_PEM_rw(name, type) DECLARE_PEM_read(name, type) DECLARE_PEM_write(name, type)
//
// #define DECLARE_PEM_read(name, type) DECLARE_PEM_read_bio(name, type) DECLARE_PEM_read_fp(name, type)
// #define DECLARE_PEM_write(name, type) DECLARE_PEM_write_bio(name, type) DECLARE_PEM_write_fp(name, type)
//
// // #define DECLARE_PEM_read_bio(name, type) type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u);
// #define DECLARE_PEM_read_bio(name, type) /**/
// // #define DECLARE_PEM_read_fp(name, type) /**/
// #define DECLARE_PEM_read_fp(name, type) type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u);
//
// // #define DECLARE_PEM_write_bio(name, type) int PEM_write_bio_##name(BIO *bp, type *x);
// #define DECLARE_PEM_write_bio(name, type) /**/
// // #define DECLARE_PEM_write_fp(name, type) int PEM_write_##name(FILE *fp, type *x);
// #define DECLARE_PEM_write_fp(name, type) /**/
//
//
// DECLARE_PEM_rw(RSA_PUBKEY, RSA)
//
// DECLARE_PEM_read(RSA_PUBKEY, RSA) DECLARE_PEM_write(RSA_PUBKEY, RSA)
//
// DECLARE_PEM_read_bio(RSA_PUBKEY, RSA) DECLARE_PEM_read_fp(RSA_PUBKEY, RSA) DECLARE_PEM_write_bio(RSA_PUBKEY, RSA) DECLARE_PEM_write_fp(RSA_PUBKEY, RSA)
//
// /**/
// RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x, pem_password_cb *cb, void *u);
// /**/
// /**/
//
//
// RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x, pem_password_cb *cb, void *u);
// /**/
// /**/
// /**/
// read public key from the specific string -- with char * from memory
if((p_rsa = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL)) == NULL) {
//if((p_rsa=PEM_read_RSAPublicKey(file,NULL,NULL,NULL))==NULL){
ERR_print_errors_fp(stdout);
return NULL;
}
flen = strlen(str);
rsa_len = RSA_size(p_rsa);
p_en = (char *) malloc(rsa_len + 1);
memset(p_en, 0, rsa_len + 1);
if(RSA_public_encrypt(rsa_len, (unsigned char *) str, (unsigned char *) p_en, p_rsa, RSA_NO_PADDING) < 0) {
return NULL;
}
RSA_free(p_rsa);
return p_en;
}
char * decrypt_with_key(char *s, char *k) {
char *p_de = NULL;
RSA *p_rsa = NULL;
int rsa_len;
// read public key from the specific string -- with char * from memory
#undef OPENSSL_NO_BIO
BIO *bio;
if ((bio = BIO_new_mem_buf(k, -1)) == NULL) // read key from string
{
perror("BIO_new_mem_buf failed!");
return NULL;
}
if((p_rsa = PEM_read_bio_RSAPrivateKey(bio, NULL, NULL, NULL)) == NULL) {
ERR_print_errors_fp(stdout);
return NULL;
}
rsa_len=RSA_size(p_rsa);
p_de = (char *) malloc(rsa_len + 1);
memset(p_de,0,rsa_len+1);
if(RSA_private_decrypt(rsa_len, (unsigned char *) s, (unsigned char*) p_de, p_rsa, RSA_NO_PADDING) < 0) {
return NULL;
}
RSA_free(p_rsa);
return p_de;
}
// decript string with the specific key
// #str the string to be decript
// #fps the file name of key
char * decrypt_with_fn(char *str, char *fps) {
char *p_de;
FILE *file;
if((file=fopen(fps,"r"))==NULL){
perror("error to open key from file");
return NULL;
}
p_de = decrypt_with_fp(str, file);
fclose(file);
return p_de;
}
// decript string with the specific key
// #str the string to be decript
// #fps the file name of key
char * decrypt_with_fp(char *str, FILE* fp) {
RSA *p_rsa = NULL;
char *p_de = NULL;
int rsa_len;
if((p_rsa = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL)) == NULL){
ERR_print_errors_fp(stdout);
return NULL;
}
rsa_len = RSA_size(p_rsa);
p_de = (char *) malloc(rsa_len + 1);
memset(p_de, 0, rsa_len + 1);
if(RSA_private_decrypt(rsa_len, (unsigned char *) str, (unsigned char *) p_de, p_rsa, RSA_NO_PADDING) < 0) {
return NULL;
}
RSA_free(p_rsa);
return p_de;
}
TLS
相关推荐
出现以下报错,替换/usr/local/include/openssl里面的文件之后编译成功。add_assoc_name_entry’:/data/src/php-5.6.23/ext/openssl/openssl.c:664: warning: ‘ASN1_STRING_data’ is deprecated (declared at /usr...
openssl-1.0.0a源代码 SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术...
Windows平台OpenSSl_64位安装包,需配环境变量,可用于android系统签名文件生成JKS文件。...如果提示无法打开openssl配置文件:设置一下配置文件:set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg
Windows x64 的 Openssl 1.1.1 安装包msi OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 OpenSSL被曝出现严重安全...
从OpenSSL的0.9.7版,Engine机制集成到了OpenSSL的内核中,成为了OpenSSL不可缺少的一部分。 Engine机制目的是为了使OpenSSL能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。OpenSSL的Engine机制...
文件:openssl-1.1.1a.tar.gz 格式:*.tar.gz 来源:下载自官网 www.openssl.org 说明:于2018年12月下载,是当时的最新版、最高版 使用方法(亲测留档):以下为Ubuntu16.04.5上亲测,卸载并安装新版openssl # ...
linux下编译/交叉编译openssl-1.1.1g生成动态库和静态库方法: 一、编译linux版本 1. cp openssl-1.1.1g.tar.gz /opt/ 2. tar -zxvf openssl-1.1.1g.tar.gz 3. mkdir build 4. ./config --prefix=/opt/openssl-1.1.1...
直接导入openssl_tools包,即可使用。在生产环境中,有时会需要用到自签名的证书,而谷歌浏览器从2016年开始就降低了sha1的算法级别,openssl默认使用的是sha1的算法。 bio = BIO_new_connect("hostname:port"); if...
用openSSL工具生成密钥使用说明: 安装后进入OpenSSL工具,输入如下命令: • Linux用户(以Ubuntu为例): $ openssl 进入OpenSSL程序 OpenSSL> genrsa -out rsa_private_key.pem 1024 生成私钥 OpenSSL> pkcs8 -...
openssl-devel-1.0.1e-57.el6.x86_64.rpm离线安装时的相关依赖库: openssl-devel-packages\e2fsprogs-1.41.12-22.el6.x86_64.rpm openssl-devel-packages\e2fsprogs-libs-1.41.12-22.el6.x86_64.rpm openssl-...
OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。OpenSSL漏洞不仅影响以https开头的网站,黑客还可利用此漏洞直接对个人电脑发起"心脏出血"(Heartbleed)攻击。据分析,...
openssl-1.0.2u + openssl-1.0.2k的rpm包
OpenResty或nginx安装依赖的openssl离线安装依赖库。当无法使用yum等联网安装命令时
openssl-1.1.1w-1.el7.centos.x86_64.rpm openssl-debuginfo-1.1.1w-1.el7.centos.x86_64.rpm openssl-devel-1.1.1w-1.el7.centos.x86_64.rpm 操作系统是centos7.3 或者 7.4 的话可以使用,其他版本没有测试,但是大...
ffmpeg版本4.3.1,openssl版本1.1.1i, android cup架构支持armeabi-v7a,arm64-v8a,x86,x86_64,ffmpeg和openssl都是基于Android API level 21编译的。自测播放本地视频文件,http视频文件和https视频文件均可正常...
适用于Android的OpenSSL脚本和二进制文件(适用于Qt Android应用),以下目录可用 Qt-5.12.3:用于Qt 5.12.3及以下版本。 Qt-5.12.4_5.13.0:它具有OpenSSL 1.1.x,只能与Qt 5.12.4和5.13.0一起使用。请注意,在...
OpenSSL Version:openssl-1.0.2j.tar.gz 目前版本最新的SSL地址为http://www.openssl.org/source/openssl-1.0.2j.tar.gz 1、将下载的压缩包放在根目录, 2、在文件夹下解压缩,命令:tar -xzf openssl-1.0.2j.tar...
openssl
由Visual Studio 2015编译生成的,包括openssl库生成的静态库版本(32位/64位)、动态库版本(32位/64位); 1、静态库版本生成文件:头文件、libcrypto.lib、libssl.lib 2、动态库版本(32位)生成文件:头文件、...
OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。OpenSSL的官方网站为http://www.openssl.org/,源代码可以从ftp://ftp.openssl.org/source/上下载,也可以从OpenSSL...