RSA 用Security.framwork解密问题

发布于 2022-09-01 19:29:12 字数 1121 浏览 28 评论 0

我用RSA的public key来解密,php那边用private key来加密,用的Security.framework来解密。但是解出来的数据前面多了一小串奇怪的乱码,后面数据是正确的。谁能帮我看看哪里有问题?

- (NSData *)decryptToDataWithPublicKey: (NSData *)dataToDecrypt
{
    NSData *wrappedSymmetricKey = dataToDecrypt;
    SecKeyRef key = self.publicKey;//这是之前已经成功使用的SecKeyRef
    
    size_t cipherBufferSize = SecKeyGetBlockSize(key);
    size_t keyBufferSize = [wrappedSymmetricKey length];
    
    NSMutableData *bits = [NSMutableData dataWithLength:keyBufferSize];
    __unused OSStatus sanityCheck = SecKeyDecrypt(key,
                                         kSecPaddingNone,
                                         (const uint8_t *) [wrappedSymmetricKey bytes],
                                         cipherBufferSize,
                                         [bits mutableBytes],
                                         &keyBufferSize);
    [bits setLength:keyBufferSize];
    return [bits copy];
}

最后的数据前面多了一堆fffff,不知道哪里出了问题..
f结束后的数据是正确的。
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦幻的心爱 2022-09-08 19:29:13

自问自答吧。最后这个方法还是没有找到解决方案,最后弃用了Security.framework,而是利用OC兼容C的特性,倒入openssl的framework,用openssl的函数解密。

- (NSString *)decryptToDataWithPublicKey: (NSString *)dataToDecrypt
{

    NSData *contentData = [dataToDecrypt base64DecodedData];
    unsigned char *decrypted = (unsigned char *)malloc(rsa_public_len - 1);
    
    char *err = NULL;
    
    if (RSA_public_decrypt([contentData length], [contentData bytes], decrypted, rsa_publicKey, RSA_NO_PADDING) == -1) {
        ERR_load_CRYPTO_strings();
        fprintf(stderr, "Error %s\n", ERR_error_string(ERR_get_error(), err));
        fprintf(stderr, "Error %s\n", err);
        return nil;
    }
    RSA_free(rsa_publicKey);
    NSString *str = [NSString stringWithUTF8String:(char *) decrypted];
    return str;
}
审判长 2022-09-08 19:29:13

楼主 有没有发现openssl RSA加密中文乱码啊 ? 中文base64编码也不行

老娘不死你永远是小三 2022-09-08 19:29:13

是不是可以写一个偏移量,或者叫补码的东西..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文