gpt4 book ai didi

c++ - RSA加密改变数据大小

转载 作者:行者123 更新时间:2023-11-28 07:55:41 26 4
gpt4 key购买 nike

我使用 openssl 演示中的示例进行 rsa 加密和解密,它可以工作,但加密后的数据与加密前的文本不同。我需要它是相同的..所以我可以在哪里修改代码,以便它可以返回相同的数据大小,而不会损坏加密过程。,??提前致谢..

下面是代码:

#include <stdlib.h>
#include <stdio.h>
#include <strings.h>

#include <openssl/rsa.h>
#include <openssl/evp.h>
#include <openssl/objects.h>
#include <openssl/x509.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/ssl.h>

#include "loadkeys.h"

#define PUBFILE "cert.pem"
#define PRIVFILE "privkey.pem"
#define STDIN 0
#define STDOUT 1

int main()
{
char *ct = "This the clear text";
char *buf;
char *buf2;
EVP_PKEY *pubKey;
EVP_PKEY *privKey;
int len;

ERR_load_crypto_strings();

privKey = ReadPrivateKey(PRIVFILE);
if (!privKey)
{
ERR_print_errors_fp (stderr);
exit (1);
}

pubKey = ReadPublicKey(PUBFILE);
if(!pubKey)
{
EVP_PKEY_free(privKey);
fprintf(stderr,"Error: can't load public key");
exit(1);
}

/* No error checking */
buf = malloc(EVP_PKEY_size(pubKey));
buf2 = malloc(EVP_PKEY_size(pubKey));

len = RSA_public_encrypt(strlen(ct)+1, ct, buf, pubKey->pkey.rsa,RSA_PKCS1_PADDING);

if (len != EVP_PKEY_size(pubKey))
{
fprintf(stderr,"Error: ciphertext should match length of key\n");
exit(1);
}

printf("%d\n", strlen(buf));
printf("%d\n", strlen(ct));
RSA_private_decrypt(len, buf, buf2, privKey->pkey.rsa,RSA_PKCS1_PADDING);

printf("%s\n", buf2);

EVP_PKEY_free(privKey);
EVP_PKEY_free(pubKey);
free(buf);
free(buf2);
return 0;
}

最佳答案

我不确定你是否理解 RSA encryption有效。

RSA 加密产生一个与 RSA key 对的模数一样宽的密文 block 。这不是 RSA 加密/解密过程的可协商属性。如果您使用的是 1024 位 RSA key ,您将获得每个“ block ”密文输入的 128 字节密文,并且每个 block 的范围可以从 1 个字节到模数大小(少一点,实际上,阅读更多关于 PKCS#1 standards here 的信息)。同样,一个 2048 位的 key 将生成一个 256 字节的密文。

RSA 昂贵;事实上,大多数非对称算法都是。出于这个原因,使用 RSA 加密对称算法 key (如 AES128 key )(也称为“ session ” key )更为常见,在使用所述 key 加密您的实际数据之后,然后将加密的 session key 和加密的数据发送给接收者。如果收件人拥有正确的 RSA 私钥,他们可以解密 session key ,然后使用那个对称地解密实际数据。

如果您想要小块加密数据,请使用对称加密。您在选择上有更大的灵 active 。

有关 RSA 加密的更多信息,请参阅 here .有关对称加密标准 AES 加密的信息,请参阅 here .

关于c++ - RSA加密改变数据大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774870/

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