【问题标题】:C encrypting string with RSA pubkeyC 使用 RSA 公钥加密字符串
【发布时间】:2014-09-17 18:43:38
【问题描述】:

我在使用生成的 RSA 公钥加密字符串时遇到问题。此密钥存储在无符号字符数组中。这是该键的示例

char *testkey = "-----BEGIN RSA PUBLIC KEY-----\n"
        "MIIBCgKCAQEA3InRLxdx25R6eA4PyXcYzKyFiJULS3ypqlETztAW488XkEM263vJ\n"
        "SY5xpfwph9thcsjYUI3H60qxaTRVhNxbzbsG0ELkEudm4cLMn2oVpphT4cB3zx6V\n"
        "az1cuzIfmL34M8YiRQw6MvdaDJS34y15dXDm0BSXF7sanZaYrHvu84j5mQVK0OWq\n"
        "kvpVs+J55xul/IQsSEWr94HjPupdDYzGXsEiQ7p5cNrvKgjGKqKV177EYROVVgVp\n"
        "gAWm0G6aDrfDLKqsXo8RXj4dyyuZqoL2e7Fa46Gz4I+tb2SWkEwLGpqBe/CUDzDh\n"
        "9aLhaTijDQhcaR5+u88XNbarckKU96wiiQIDAQAB\n"
        "-----END RSA PUBLIC KEY-----\0";

我目前已经编写了这段代码来进行加密

RSA                     *rsa = NULL;
BIO                     *key_bio;

static const int        bit = 2048;

key_bio = BIO_new_mem_buf(testkey, -1);

if(key_bio == NULL){
    printf("No key bio \n");
    exit(1);
}

rsa = PEM_read_bio_PUBKEY(key_bio, NULL, NULL, NULL);

if(rsa == NULL){
    fprintf(stderr, "Error loading RSA Public Key File.\n");


    ERR_print_errors_fp(stderr);
    exit(1);
}

// Alloc the encrypted buffer
e->enckey = calloc(1, 2048);

int res = RSA_public_encrypt(strlen((char*)e->key->key), e->key->key, e->enckey, rsa, RSA_PKCS1_PADDING);

if(res == -1){
    printf("Failed to encrypt AES key \n");
    printf("Error: strerror(errno)\n");
}

但是,这不起作用。我认为这是关于密钥格式的问题,但是我还没有设法找出如何转换它,并使用 RSA 结构进行加密。

有什么想法吗?

【问题讨论】:

  • “这不起作用”是什么意思?它编译吗?它运行吗?您是否收到任何错误消息?你有输出吗?预期的行为是什么? (另外,e 声明在哪里?为什么缺少这段代码?)
  • E 无关紧要。只是一个包含我要加密的数据的结构。加密数据的缓冲区也存储在那里。程序终止,因为 RSA = NULL,并打印错误:期望公钥。 E 是从另一个函数传递给这个函数的。

标签: c rsa


【解决方案1】:

现在似乎工作正常,使用这个 insead:

PEM_read_bio_RSAPublicKey(key_bio, &rsa, 0, NULL);

这可能与KEY的格式有关。

【讨论】:

    最近更新 更多