私はそれをしたことがないので、基本(およびライブラリの場所)が必要です。
- 私はchar配列を持っています(バイナリ、NULL値を含む場合があります)。
- 証明書(オープンキーとプライベートキー)を含むPEMファイルがあります。これらは、JAVA の「keytool」で作成された場所です。
- 受信者に公開鍵を送信しました
今何をする?keystore.jks にある証明書と秘密鍵を使用してバイト配列に署名するにはどうすればよいですか?
プレーンCでこれを行うことはできますか? これらの配列の多くに自動的に署名する必要があります。私の精神的な問題は、私のソフトウェアがそれを知らなければならないので、パスワードはあまり秘密ではないということですか?
助けてくれてありがとう、または私のすべての初心者の質問に答える適切なウェブサイトに私を押してください.
エディス:
これで、質問をもう少し詳しく説明できます。openssl を使用してコマンド ラインでメッセージに署名する方法はわかっています。
openssl dgst -dss1 -sign privkey.pem -out message.txt.sha1 message.txt
私が必要としているのは、C-Functioncall です (レガシー オペレーティング システムと大量のインクルード用に crypto.lib と ssl.lib (バージョン 0.9.8h) を取得しました)、次のようなものです。
openssl(&my_signature, &my_signatureLen, my_message, my_messageLen, "dgst", "-dss1", "-sign", my_privkey_pem_file, my_privkey_pem_password);
sha1 署名を ByteArray my_signature に格納します。私を正しいヘッダーファイルにプッシュできる人はいますか?
ありがとう
EDTH 2:
目標にさらに一歩近づいていますが、エラーは発生しませんが、署名の長さは0になります
#include "../include/openssl/dsa.h"
#include "../include/openssl/pem.h"
#include "../include/openssl/evp.h"
#include "../include/openssl/err.h"
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
--> here any more initialization I miss?
short fehler = 0;
FILE *fp = fopen("u:\\keys\\privkey.pem", "rb"); //unsecure
if (fp) {
DSA *dsa = PEM_read_DSAPrivateKey(fp, NULL, NULL, "password"); //unsecure
--> here anything more to do with the dsa-structure?!?
if (dsa) {
--> here I am, so i cannot be so wrong
fehler = !DSA_sign(0, data, dataLen, signatur, &signaturLen, dsa);
if (fehler) {
--> error:0A070064:dsa routines:DSA_do_sign:data too large for key size
ps("ERROR: no signing");
ps(ERR_error_string(ERR_get_error(), buf));
}
DSA_free(dsa);
} else {
ps("ERROR: no dsa");
ps(ERR_error_string(ERR_get_error(), buf));
}
fclose (fp);
} else {
ps("ERROR: File not open");
}
EVP_cleanup();
ERR_free_strings();