繁体   English   中英

RSA加密长度不一致的结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM