gpt4 book ai didi

C OpenSSLRSA双重加密失败

转载 作者:行者123 更新时间:2023-11-30 20:30:10 26 4
gpt4 key购买 nike

我有 2 个进程通过套接字连接。我使用 RSA 来加密和解密消息。客户端有以下 key :

    RSA *client_private_key;
RSA *client_public_key;
RSA *server_public_key;

我想要做的是首先使用客户端的私钥加密明文,然后使用服务器的公钥加密。

unsigned char *plaintext =
(unsigned char *)"Hello";
int encrypted_length= rsa_prv_encrypt(plaintext, strlen(plaintext), client_private_key, encrypted);
int encrypted_length2 = rsa_pub_encrypt(encrypted, encrypted_length, server_public_key, encrypted2);

encrypted_length2 始终为 -1,这意味着加密出现问题。

我测试了以下场景以确保功能正常工作:
使用客户端私钥加密 -> 使用客户端公钥解密
使用客户端公钥加密 -> 使用客户端私钥 key 解密

但是双重加密似乎不起作用,我不知道为什么。
知道可能是什么问题并且第二个函数总是返回 -1 吗?

最佳答案

RSA 无法加密大于 key 大小的数据。例如,RSA 4096 key 只能加密 4096 位数据。

但是,将保留 11 个字节用于填充。例如,您可以使用 4096 位 RSA key 加密的最大有效负载为 501 字节。同样,RSA 2048 位 key 的限制为 245 字节。

RSA 加密的输出始终等于 key 大小(例如 512 或 256 字节)。

这意味着您无法使用相同大小的 key 对 RSA 加密的 blob 进行加密,除非您执行“原始 rsa 加密”,这不会进行填充(因为 256 > 245 和 512 > 501)。

但是,如果您想对数据进行签名,最好计算 SHA,然后对该 SHA 进行签名,而不是尝试未填充的加密。

关于C OpenSSLRSA双重加密失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54948862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com