gpt4 book ai didi

c - 没有填充的OpenSSL RSA加密无法正确加密

转载 作者:行者123 更新时间:2023-12-02 04:09:55 25 4
gpt4 key购买 nike

我们正在尝试使用“RSA_public_encrypt()”方法(Symbian上的openSSL)执行RSA加密,但是效果并不理想。
加密本身会成功,但是加密的文本(我们尝试将其匹配为哈希)不是应该的
(在其他平台上,我们检查了一下是否可以正常运行,并且在这里获得了不同的值)。
我们认为这可能是由于未以“RSA_public_encrypt()”方法的正确格式提供输入。

代码:

#define RSA_E 0x10001L
void Authenticator::Test(TDesC8& aSignature, TDesC8& aMessage) {
RSA *rsa;
char *plainkey;
char *cipherkey;
int buffSize;

// create the public key
BIGNUM * bn_mod = BN_new();
BIGNUM * bn_exp = BN_new();

const char* modulus2 = "137...859"; // 309 digits
// Convert to BIGNUM
int len = BN_dec2bn(&bn_mod, modulus2); // with 309 digits -> gives maxSize 128 (OK!)
BN_set_word(bn_exp, RSA_E);

rsa = RSA_new(); // Create a new RSA key
rsa->n = bn_mod; // Assign in the values
rsa->e = bn_exp;
rsa->d = NULL;
rsa->p = NULL;
rsa->q = NULL;

int maxSize = RSA_size(rsa); // Find the length of the cipher text
// maxSize is 128 bytes (1024 bits)

// session key received from server side, what format should this be in ???
plainkey = "105...205"; // 309 digits

cipherkey = (char *)malloc(maxSize);
memset(cipherkey, 0, maxSize);
if (rsa) {
buffSize = RSA_public_encrypt(maxSize, (unsigned char *) plainkey, (unsigned char *) cipherkey, rsa, RSA_NO_PADDING);

unsigned long err = ERR_get_error();

free(cipherkey);
free(plainkey);
}

/* Free */
if (rsa)
RSA_free(rsa);

}

我们有一个309个字符的普通键,但是maxSize是128个字节(RSA_NO_PADDING,因此输入必须等于模数大小),
所以只有前128个字符被加密(不确定是否正确吗?),这可能就是为什么
我们的加密文本不是应该的。还是还有其他我们做不正确的事情?
那么转换我们的纯文本以便对“plainkey”的所有数据进行加密的正确方法是什么?

我们还使用十六进制字符串'9603cab ...'尝试了此操作,该字符串的长度为256个字符,但未成功。
因此,如果正确转换为字节(128),可以使用该转换,如果可以,转换将如何工作?

非常感谢任何帮助,谢谢!

最佳答案

看看这个文件,也许有帮助:https://gist.github.com/850935

关于c - 没有填充的OpenSSL RSA加密无法正确加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5817334/

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