![](/img/trans.png)
[英]RSA Encryption using openssl, variable length for encrypted text with PKCS1 Padding
[英]Inconsistent RSA encryption length result
我正在使用外部库OpenSSL-Universal使用RSA_PKCS1_PADDING加密密码。 不幸的是,char编码结果的输出长度不一致。 假设我有2048位模数,我期望的长度结果是128,否则它将无法解密回纯文本。
BIGNUM *xponent = BN_new();
BIGNUM *modulus = BN_new();
BN_hex2bn(&xponent,xponentInHex);
BN_hex2bn(&modulus,modInHex);
RSA *rsa = RSA_new();
rsa->e = xponent;
rsa->n = modulus;
char encoded[1024] = {0};
RSA_public_encrypt(
(int)strlen(charString),// from len
(const unsigned char *)charString, // from
(unsigned char *)encoded, // to
rsa,
RSA_PKCS1_PADDING
);
RSA_free(rsa);
NSLog(@"%lu", strlen(encoded));
如果我的工具有任何问题,或者您对长度不一致的结果有任何解释,请告诉我
RSA_public_encrypt
加密输出不是字符串 ,因此无法使用strlen
检查其长度。 我希望您确实意识到strlen会将在加密输出中看到的任何'\\ 0'视为字符串的结尾,并将返回直到该点的字节数作为字符串的长度。 但是,加密缓冲区的有效字节可以为'\\ 0'。
另外,请注意RSA_public_encrypt返回您应使用的加密数据的长度。
您可以尝试使用Objective-C-RSA第三方库,或者阅读源代码,然后自己实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.