Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 解密大量RSA加密数据_Objective C_Encryption_Cryptography_Rsa - Fatal编程技术网

Objective c 解密大量RSA加密数据

Objective c 解密大量RSA加密数据,objective-c,encryption,cryptography,rsa,Objective C,Encryption,Cryptography,Rsa,嗨,伙计们,我需要简单的RSA加密解密。 我在Apple developer guide上尝试了代码示例,它非常适用于少量文本,但示例代码不适用于大量加密数据的情况 注意下面的评论,它建议我们“将数据拆分为等于plainBufferSize的块”: -(NSData*)解密数据fromdata:(NSData*)数据使用key:(SecKeyRef)key { 骨状态=noErr; size_t cipherBufferSize=[数据长度]; uint8_t*cipherBuffer=(uin

嗨,伙计们,我需要简单的RSA加密解密。 我在Apple developer guide上尝试了代码示例,它非常适用于少量文本,但示例代码不适用于大量加密数据的情况

注意下面的评论,它建议我们“将数据拆分为等于plainBufferSize的块”:

-(NSData*)解密数据fromdata:(NSData*)数据使用key:(SecKeyRef)key
{
骨状态=noErr;
size_t cipherBufferSize=[数据长度];
uint8_t*cipherBuffer=(uint8_t*)[数据字节];
大小(不包括大小);;
uint8_t*普通缓冲区;
//分配缓冲区
plainBufferSize=SecKeyGetBlockSize(密钥);
plainBuffer=malloc(plainBufferSize);
if(plainBufferSize

关于如何修改此方法以使其将数据分割为块以处理大量数据的任何线索?

根据RSAES-PKCS1-v1_5加密方案,您正在使用的加密方案可以对长度高达k-11个八位字节(k是RSA模数的八位字节长度)的消息进行操作所以,若您使用的是2048位RSA密钥,那个么要加密的普通数据的最大长度是245字节。因此,您需要将普通数据分割成这种大小的数据块,然后分别对它们进行加密,但这是一种非常罕见且缓慢的解决方案。生成对称AES密钥、使用AES算法加密大数据,然后使用RSA密钥加密小AES密钥要好得多(也很常见)。

根据RSAES-PKCS1-v1_5加密方案,您正在使用的加密方案可以对长度高达k-11个八位字节(k是RSA模的八位字节长度)的消息进行操作所以,若您使用的是2048位RSA密钥,那个么要加密的普通数据的最大长度是245字节。因此,您需要将普通数据分割成这种大小的数据块,然后分别对它们进行加密,但这是一种非常罕见且缓慢的解决方案。生成对称AES密钥、使用AES算法加密大数据,然后使用RSA密钥加密小AES密钥要好得多(也很常见)。

根据RSAES-PKCS1-v1_5加密方案,您正在使用的加密方案可以对长度高达k-11个八位字节(k是RSA模的八位字节长度)的消息进行操作所以,若您使用的是2048位RSA密钥,那个么要加密的普通数据的最大长度是245字节。因此,您需要将普通数据分割成这种大小的数据块,然后分别对它们进行加密,但这是一种非常罕见且缓慢的解决方案。生成对称AES密钥、使用AES算法加密大数据,然后使用RSA密钥加密小AES密钥要好得多(也很常见)。

根据RSAES-PKCS1-v1_5加密方案,您正在使用的加密方案可以对长度高达k-11个八位字节(k是RSA模的八位字节长度)的消息进行操作所以,若您使用的是2048位RSA密钥,那个么要加密的普通数据的最大长度是245字节。因此,您需要将普通数据分割成这种大小的数据块,然后分别对它们进行加密,但这是一种非常罕见且缓慢的解决方案。生成对称AES密钥、使用AES算法加密大数据,然后使用RSA密钥加密小AES密钥要好得多(而且非常常见)。

您好,jariq,谢谢您为我指明了正确的方向。是否有任何现有的objective-c库可以执行您建议的混合解决方案?(我的最终目标是让应用程序用户能够将数据上传到我的服务器上,而这些数据只能由预期的接收者解密,我想确保即使是我也无法读取它们)顺便说一句,我想我将使用现有的苹果相同代码+RNCryptor:DHi jariq,谢谢你为我指明了正确的方向。是否有任何现有的objective-c库可以执行您建议的混合解决方案?(我的最终目标是让应用程序用户能够将数据上传到我的服务器上,而这些数据只能由预期的接收者解密,我想确保即使是我也无法读取它们)顺便说一句,我想我将使用现有的苹果相同代码+RNCryptor:DHi jariq,谢谢你为我指明了正确的方向。是否有任何现有的objective-c库可以执行您建议的混合解决方案?(我的最终目标是让应用程序用户能够将数据上传到我的服务器上,而这些数据只能由预期的接收者解密,我想确保即使是我也无法读取它们)顺便说一句,我想我将使用现有的苹果相同代码+RNCryptor:DHi jariq,谢谢你为我指明了正确的方向。是否有任何现有的objective-c库可以执行您建议的混合解决方案?(我的最终目标是让应用程序用户能够将数据上传到我的服务器上,这些数据只能由指定的接收者解密,我想确保即使我也无法读取它们)顺便说一句,我想我将使用现有的苹果相同的代码+RNCryptor:D
    - (NSData*)decryptedDataFromData:(NSData*)data usingKey:(SecKeyRef)key
    {
        OSStatus status = noErr;

        size_t cipherBufferSize = [data length];
        uint8_t *cipherBuffer = (uint8_t *)[data bytes];

        size_t plainBufferSize;
        uint8_t *plainBuffer;

        //  Allocate the buffer
        plainBufferSize = SecKeyGetBlockSize(key);
        plainBuffer = malloc(plainBufferSize);

        if (plainBufferSize < cipherBufferSize) {
            // Ordinarily, you would split the data up into blocks
            // equal to plainBufferSize, with the last block being
            // shorter. For simplicity, this example assumes that
            // the data is short enough to fit.
            printf("Could not decrypt.  Packet too large.\n");
            return nil;
        }

        //  Error handling
        status = SecKeyDecrypt(key,
                               kSecPaddingPKCS1,
                               cipherBuffer,
                               cipherBufferSize,
                               plainBuffer,
                               &plainBufferSize
                               );                              // 3

        //  Error handling
        //  Store or display the decrypted text

        if(key) CFRelease(key);

        NSData *decrypted = [NSData dataWithBytes:(const void *)plainBuffer length:plainBufferSize];
        return decrypted;
    }