openssl.net rsa加密工作示例需要

有没有人使用OpenSSL.NET进行RSA加密的任何工作示例? 我想使用以PEM格式存储的私钥来加密一些数据。

我创建一个OpenSSL.Crypto.RSA对象并希望使用PrivateEncrypt方法,但它抛出OpenSSLException而没有其他数据(空Errors数组,没有内部exception)。 在使用PrivateEncrypt方法之前,我使用从命令openssl rsa -in private_key.pem -text -noout读取的数据填充所有属性(如PublicModulus,PrivateExponent等)

有谁知道如何将PEM文件读入OpenSSL.Crypto.RSA对象或有任何其他工作加密示例?

这是Linux上的C / C ++,但是直到我痛苦地开始工作才发现这样的简单例子

生成关键命令行

openssl genrsa -out privkey.pem 2048

HelloWord.cpp

#include  #include  #include  int main() { char *message = "Hello World"; unsigned char* encrypted = (unsigned char *) malloc(500); unsigned char* decrypted = (unsigned char *) malloc(500); int bufSize; FILE *keyfile = fopen("privkey.pem", "r"); RSA *rsa = PEM_read_RSAPrivateKey(keyfile, NULL, NULL, NULL); printf("\n\nStarting Message = %s\n", message); if (rsa == NULL) { printf("Badness has occured! Did not read key file\n"); return 0; } else { printf("Opened the key file OK!\n"); } bufSize = RSA_public_encrypt(strlen(message), (unsigned char *) message, encrypted, rsa, RSA_PKCS1_PADDING); if (bufSize == -1) { printf("Badness has occured! encryption failed\n"); RSA_free(rsa); return 0; } else { printf("Encrypted the message OK! = \n%s\n", encrypted ); } if (RSA_private_decrypt(bufSize, encrypted, decrypted, rsa, RSA_PKCS1_PADDING) != -1) { printf("\nMessage decrypted to : %s\n", decrypted); } else { printf("Badness has occured! decryption failed\n"); RSA_free(rsa); return 0; } RSA_free(rsa); return 1; } 

Makefile文件

 #----------------------------------------------------------------------------- # # File : global.make # Date : 09/03/2009 # Author : Tom Nortillo # # Description: universal make definitions for development area # #----------------------------------------------------------------------------- #---------------------------------- # GENERAL #---------------------------------- CPP=g++ BASE=/home/joneil001/RSAEncryption CPPFLAGS = -c -fPIC LDFLAGS = -static BIN = ${BASE} #=================================================================== # # THIRD-PARTY LIBRARIES # #=================================================================== #------------------- # ORACLE #------------------- ORALIB= -L${ORACLE_LIB} -lclntsh ORAINC= -I${ORACLE_HOME}/precomp/public -I${ORACLE_HOME}/rdbms/public PROC=${ORACLE_BIN}/proc ORAEXT = -DORACA_STORAGE_CLASS=extern -DSQLCA_STORAGE_CLASS=extern #------------------- # LIBXML #------------------- XML_INC = -I${BASE}/lib_xml/include/libxml2 XML_LIB = -L${BASE}/lib_xml/lib -lxml2 #-------------------------------- # GOOGLE PROTOCOL BUFFERS #-------------------------------- GOOGLE_INC = -I${BASE}/lib_google/include GOOGLE_LIB = -L${BASE}/lib_google/lib -lprotobuf GOOGLE_BIN = ${BASE}/lib_google/bin #============================================== # # OpenSSL # #============================================= OPENSSL_LIB = -L/usr/lib64 -lcrypto -L/usr/lib64/openssl/engines -laep -lcswift -lchil -l4758cca -lgmp -lubsec -lsureware -lnuron -latalla #=================================================================== # # BUILD COMMAND-LINES # #=================================================================== #-------------------- # LIBRARIES #-------------------- LIBLIST = -L${BASE}/lib \ ${OPENSSL_LIB} # Repeated twice because of library inter-dependencies LIBS = ${LIBLIST} ${LIBLIST} #-------------------- # INCLUDES #-------------------- LOCAL_INC = -I. INCLUDE = ${LOCAL_INC} ${ORAINC} #=================================================================== # # RULES # #=================================================================== .SUFFIXES: .cpp .SUFFIXES: .cc $(SUFFIXES) .SUFFIXES: .pc $(SUFFIXES) .SUFFIXES: .proto $(SUFFIXES) .cpp.o: ${CPP} ${CPPFLAGS} ${INCLUDE} $< .cc.o: ${CPP} ${CPPFLAGS} ${INCLUDE} $< .pc.o: ${PROC} SYS_INCLUDE=/usr/include include=${ORAINC} code=CPP cpp_suffix=cpp parse=NONE dbms=v8 iname=$< oname=$(*F).cpp lname=$(*F).lis ${CPP} ${CPPFLAGS} ${INCLUDE} ${ORAINC} ${ORAEXT} $*.cpp rm -f $*.cpp rm -f $*.lis rm -f tp* .proto.o: ${GOOGLE_BIN}/protoc --cpp_out=. $< ${CPP} ${CPPFLAGS} ${INCLUDE} ${ORAINC} ${ORAEXT} $*.pb.cc #=================================================================== # # TARGETS # #=================================================================== TARGET=doit OBJECTS = HelloWorld.o all: ${OBJECTS} ${CPP} ${INCLUDE} -o ${BIN}/${TARGET} ${OBJECTS} ${LIBS} clean: touch HelloWorld.o; rm *.o