OpenSSLを用いたRSAのプログラミングでエラー – プログラミング – Home

OpenSSLを用いたRSAのプログラ...
 
通知
すべてクリア

[解決済] OpenSSLを用いたRSAのプログラミングでエラー


たにし
 たにし
(@たにし)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

開発環境 WindowsXP(Pro) VC++2005(Pro)

コンパイル済みのOpenSSLライブラリをダウンロードし、
VC++2005の設定にもOpenSSLのディレクトリを追加しました。
Webで見つけたサンプルソースを元にして、次のようなソースになりました。
(元のサンプルソースと、ほとんどかわりませんが)

公開カギ暗号方式(RSA)の公開カギと秘密カギを
PEM形式で書き出すというプログラムです。

つぎの3つの関数に入ったとたん、
OpenSSLがエラーを標準出力に吐き出してしまいます。
RSA_print_fp()、PEM_write_RSAPublicKey()、PEM_write_RSAPrivateKey()

エラー内容は「PENSSL_Uplink(100E1010,07): no OPENSSL_Applink」です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OpenSSLの公式サイトに気になる文章が載っていました。
http://www.openssl.org/support/faq.html#PROG2
これを参考にし、プロジェクトの設定→コード生成→ランタイムライブラリを/MDにし、
ソースに#include <openssl/applink.c>を追加したのですが、
あいかわらずエラーがでてしまい、PEMファイルが作成されません。

アドバイスよろしくお願い致します。

#include <stdio.h>
#include <string.h>
#include <openssl/applink.c>
#include <openssl/rsa.h>
#include <openssl/engine.h>
#include <openssl/pem.h>
#pragma comment(lib, libeay32.lib)
#pragma comment(lib, ssleay32.lib)

static void printError(char *msg, unsigned long err);

int main(int argc, char *argv[])
{
OpenSSL_add_all_algorithms();
int size = 1024;
unsigned long expornent = 65537;
FILE *privateKeyFile;
FILE *publicKeyFile;

if(argc != 3)
{
fprintf(stderr,
Usage : %s privateKeyFile publicKeyFile\n, argv[0]);
exit(-1);
}
else
{
privateKeyFile = fopen(argv[1], w);
if (privateKeyFile == NULL)
{
perror(failed to fopen);
exit(-1);
}

publicKeyFile = fopen(argv[2], w);
if (publicKeyFile == NULL)
{
perror(failed to fopen);
exit(-1);
}
}

// キーペアの作成
RSA *rsaKey = RSA_generate_key(size, expornent, NULL, NULL);
if (rsaKey == NULL)
{
printError(failed to RSA_generate_key,ERR_get_error());
exit(-1);
}

if(RSA_print_fp(stdout, rsaKey, 0) != 1)
{
printError(failed to RSA_print_fp,ERR_get_error());
exit(-1);
}

// 公開鍵をPEM形式で書き出し
if(PEM_write_RSAPublicKey(publicKeyFile, rsaKey) != 1)
{
printError(failed to PEM_write_RSAPublicKey,ERR_get_error());
exit(-1);
}

// 秘密鍵をPEM形式で書き出し
if(PEM_write_RSAPrivateKey(privateKeyFile, rsaKey,
NULL,
NULL, 0,
NULL, NULL) != 1)
{
printError(failed to PEM_write_RSAPrivateKey,ERR_get_error());
exit(-1);
}

// 領域の開放
RSA_free(rsaKey);

fclose(privateKeyFile);
fclose(publicKeyFile);

return 0;
}

static void printError(char *msg, unsigned long err)
{
char *errmsg = ERR_error_string(err, NULL);
fprintf(stderr, %s(%s)\n,
msg,
errmsg);
}


引用未解決
トピックタグ
たにし
 たにし
(@たにし)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

自己解決いたしました。
どうやら、Windows用のOpenSSLのバイナリを使っていなかったことが原因でした。

解決・設定方法を書いておきます。

1.以下のサイトで、Windows用OpenSSLバイナリをダウンロード。
http://www.slproweb.com/products/Win32OpenSSL.html

2.ダウンロードしたexeファイルによりインストール
  ここではインストール先を[C:\OpenSSL]にしたとする。

3.VC2005の[ツール]→[オプション]
  →[プロジェクトおよびソリューション]→[インクルードファイル]
  →[C:\OpenSSL\includes]を追加。

4.ソースコードに次の3行を記述。
#include <openssl/applink.c>

#pragma comment(lib, libeay32.lib)
#pragma comment(lib, ssleay32.lib)

これで[ OPENSSL_Uplink(100E1010,07): no OPENSSL_Applink ]というエラーが
出なくなりました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました