2

我从来没有这样做过,所以我需要基础知识(以及在哪里可以找到图书馆)。

  • 我有一个 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();
4

0 回答 0