我从来没有这样做过,所以我需要基础知识(以及在哪里找到这些库)。
现在该怎么办?如何使用证书和驻留在keystore.jks中的私钥来签署我的字节数组?
我能用普通的C做到这一点吗? 我必须自动签署很多这些数组。所以我的心理问题是,密码不是很秘密,因为我的软件必须知道它?
感谢您提供任何帮助,或者将我推送到正确的网站,该网站可以解答我所有初学者的问题。
EDITH:
现在我可以更多地指出我的问题:我知道,如何使用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-signature存储到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();