带有公钥分割故障的openssl加密

时间:2014-03-17 08:31:44

标签: c openssl

在shell中,使用下面的openssl命令,我可以使用公钥加密秘密消息并使用私钥解密。

# private key generation
openssl genrsa -out key.pem 1024

# public key generation from private key
openssl rsa -in key.pem -pubout > pubkey.pub

# encrypt a message with public key
openssl rsautl -encrypt -pubin -inkey pubkey.pub -in msg > out

# decrypt a message with private key
openssl rsautl -decrypt -inkey key.pem -in out

现在我想用C语言中的openssl开发库做同样的事情。当我使用下面的代码并使用gcc main.c -lcrypto进行编译时,它不会给出错误并打印出128作为大小。我可以成功加密和解密消息。但是,我想隐藏源代码用户的私钥,并仅使用公钥进行加密。因此,我尝试使用这个代码的第二个版本,这对我来说是正确的,但它不起作用,它总是给出分段错误。

#include <stdio.h>
#include <string.h> 
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>


int main(){
char error_message[120];
unsigned char to[128];

FILE *pem_file = fopen("key.pem", "rb");

if (pem_file == NULL) {
  fprintf(stderr, "Can't open input file in.list!\n");
  exit(1);
}


RSA *rsa  = PEM_read_RSAPrivateKey(pem_file, NULL, NULL, NULL);
printf("%d\n", RSA_size(rsa));
}

第二版:读取公钥并初始化rsa对象。

#include <stdio.h>
#include <string.h> 
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>


int main(){
char error_message[120];
unsigned char to[128];

FILE *pem_file = fopen("pubkey.pub", "rb");

if (pem_file == NULL) {
  fprintf(stderr, "Can't open input file in.list!\n");
  exit(1);
}


RSA *rsa  = PEM_read_RSAPublicKey(pem_file, NULL, NULL, NULL);
printf("%d\n", RSA_size(rsa));
}

0 个答案:

没有答案