dポイントプレゼントキャンペーン実施中!

こんにちは。
現在WindowsXP環境にてOpenSSL(ver0.9.8.h)を使用したDLL(C言語)の作成を行っています。

そこでlibeay32.dll、libssl32.dllをsystem32に配置し、VC++を使用してDLL作成のプロジェクトでPEMファイルを読み込む関数を作成しました。

その関数の中で、PEM_write_RSA_PUBKEY、PEM_read_RSA_PUBKEY等を実行すると異常終了してしまいます。(エラーが表示されず、強制終了します。)

そこで通常のプロジェクトで同じように作成し、実行しても駄目でした。

ですが、ファイル出力ではなく、stdout(コンソール)だとうまくいくのでよくわかりません。

どなたか原因のわかる方はいらっしゃいますでしょうか?

OS:WindowsXP
OpenSSL:0.9.8.h

A 回答 (2件)

(たぶん)ソースコードには問題ないと思います。


DLL だけ以下のサイトから差し替えてみてはどうでしょうか。

参考URL:http://www.nec.co.jp/WebOTX/module/apache1_08070 …
    • good
    • 0
この回答へのお礼

参考URL先のDLLを使用したらうまくいきました。

ありがとうございました。

お礼日時:2008/07/22 09:24

皆目検討もつきませんが、


OpenSSL はご自分でコンパイルされたのでしょうか。

また、もし前後のソースコードを公開できるのなら、
それも解決のヒントになるかと思います。

この回答への補足

回答ありがとうございます。

OpenSSLは
http://www.slproweb.com/products/Win32OpenSSL.html
からダウンロードしたDLLを使用しています。

ソースコード(通常のプロジェクト)は

// main.c

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

int main() {
FILE *fp;
RSA *rsa;
int result;

fp = fopen("C:\\publicKey", "w");
if( fp == NULL ) {
printf("FILE ERROR!!");
return 1;
}

rsa = RSA_generate_key(2048, 65537, NULL, NULL);
if (rsa == NULL) {
printf("RSA ERROR!!");
fclose(fp);
return 1;
}

result = PEM_write_RSA_PUBKEY(fp, rsa);
if( result != 1 ) {
printf("PEM WRITE ERROR!!");
fclose(fp);
return 1;
}

RSA_free(rsa);

fclose(fp);
return 0;
}

// end

result = PEM_write_RSA_PUBKEY(fp, rsa);の部分で強制終了してしまいます。

また、resutl = PEM_write_RSA_PUBKEY(stdout, rsa);
だと正常終了します。

よろしくお願いいたします。

補足日時:2008/07/19 20:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!