1

Javaを使用して公開/秘密鍵ペアを生成しました。キーを(ファイルとしてではなく)コードに追加したいので、使用しました

byte[] priv = private_key.getEncoded() 

バイト配列として取得します。使用するバイト配列から秘密鍵を取得するには

PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(priv);

復号化は期待どおりに機能しています。しかし今、opensslを使用してacアプリケーション内でそのキーを使用したいと考えています。そこで、バイト配列をJavaからCにchar []としてコピーしました。しかし、この char[] を秘密鍵に変換して、RSA_public_decrypt(...) を介した復号化に使用することはできません。

RSA *r = d2i_RSAPrivateKey(NULL,&priv, len);

しかし、これは常に NULL ポインタを返します

C言語でこれを行う方法のヒントを教えてください。

編集:一方、opensslのエラーコードを確認したところ、

エラー:0D0680A8:lib(13):機能(104):理由(168)

しかし、これらのエラーコードをどうするかわかりません。ネットでの検索はまだ役に立ちませんでした。

よろしくお願いします。こんにちは、-クリス-

4

2 に答える 2

1

srikanth yaradla からのヒントのおかげで、正しい方向を見つけました。これが私がそれをした方法です:

const unsigned char private_key[] = {0x30,...};
size_t private_key_len = sizeof(private_key);
char* buf = (char*)malloc(private_key_len);
memcpy(buf, private_key, private_key_len);
BIO* mem=BIO_new_mem_buf(buf, private_key_len);
PKCS8_PRIV_KEY_INFO* p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(mem, NULL);
EVP_PKEY* pkey = EVP_PKCS82PKEY(p8inf);
RSA* r = EVP_PKEY_get1_RSA(pkey);

それを行った後、Java部分から取得したデータを簡単に復号化できるようになりました。

于 2012-08-09T19:53:47.820 に答える
1

エンコードされたバイナリ データをコピーしていますか、それともファイルから読み取ったバイナリ データだけをコピーしていますか? OpenSSL C ライブラリを使用して、RSA キーをバイナリ データから RSA 構造にロードする方法を参照してください。

于 2012-08-09T07:14:11.107 に答える