gpt4 book ai didi

c - 汉字加密失败

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:36 24 4
gpt4 key购买 nike

我使用 RSA_public_encrypt() 来加密中文字符串。例如:

char buf[] = "你好";
RSA_public_encrypt(s, buf, p, r, RSA_NO_PADDING);

OpenSSL返回的错误字符串是:

error:04068084:lib(4):func(104):reason(132)

它会失败。我想知道为什么?

最佳答案

error:04068084:lib(4):func(104):reason(132)

那是相当无用的。当您看到这样的字符串时,请使用 openssl errstr 命令:

$ openssl errstr 0x04068084
error:04068084:rsa routines:RSA_EAY_PUBLIC_ENCRYPT:data too large for modulus

看起来您的示例与产生错误的实际代码不匹配。或者 OpenSSL 错误消息是错误的 - 它应该说 “data too small for modulus”

您要加密的字符串有大小限制。来自 RSA_public_encrypt :

RSA_public_encrypt() encrypts the flen bytes at from (usually a session key) using the public key rsa and stores the ciphertext in to. to must point to RSA_size(rsa) bytes of memory...

flen must be less than RSA_size(rsa) - 11 for the PKCS #1 v1.5 based padding modes, less than RSA_size(rsa) - 41 for RSA_PKCS1_OAEP_PADDING and exactly RSA_size(rsa) for RSA_NO_PADDING. The random number generator must be seeded prior to calling RSA_public_encrypt().

根据手册页,由于您正在使用 RSA_NO_PADDING,因此被加密的字符串的长度必须正好是 RSA_size(rsa)。实际上,这意味着您负责填充而不是库。

上面, session key 通常很小,例如 16 或 32 字节。通常情况下, session key 用于加密 block 密码或流密码,如 AES、Camellia、TripleDES、ChaCha 等。然后,明文在 block 密码或流密码下加密。最后, block 或流密码 key 在 RSA key 下加密。

您可能还对 Key Encryption Key (KEK) 感兴趣 Content Encryption Key (CEK) 。它们是 key 管理 策略的一部分。以上,RSA key 是您的 key 加密 key (KEK)内容加密 key (CEK) 是 session key 。

关于c - 汉字加密失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39157529/

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