Converting NSData to SecKeyRef

前端 未结 2 1826
情话喂你
情话喂你 2020-12-15 12:08

i have a public key which i gathered from a remote server and i want to perform RSA encryption with that public key. But the problem is i get the public key data as byte arr

2条回答
  •  北荒
    北荒 (楼主)
    2020-12-15 12:52

    Hope It will work....

    -(NSData*)convertIOSKeyToASNFormat:(NSData*)iosKey{
    
        static const unsigned char _encodedRSAEncryptionOID[15] = {
            /* Sequence of length 0xd made up of OID followed by NULL */
            0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
            0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00
        };
    
        // OK - that gives us the "BITSTRING component of a full DER
        // encoded RSA public key - we now need to build the rest
    
        unsigned char builder[15];
        NSMutableData * encKey = [[[NSMutableData alloc] init] autorelease];
        int bitstringEncLength;
    
        // When we get to the bitstring - how will we encode it?
        if  ([iosKey length ] + 1  < 128 )
            bitstringEncLength = 1 ;
        else
            bitstringEncLength = (([iosKey length ] +1 ) / 256 ) + 2 ;
    
        // Overall we have a sequence of a certain length
        builder[0] = 0x30;    // ASN.1 encoding representing a SEQUENCE
    
        // Build up overall size made up of -
        size_t i = sizeof(_encodedRSAEncryptionOID) + 2 + bitstringEncLength +
        [iosKey length];
    
        size_t j = [self encodeLen:&builder[1] length:i];
        [encKey appendBytes:builder length:j +1];
    
        // First part of the sequence is the OID
        [encKey appendBytes:_encodedRSAEncryptionOID
                     length:sizeof(_encodedRSAEncryptionOID)];
    
        // Now add the bitstring
        builder[0] = 0x03;
        j = [self encodeLen:&builder[1] length:[iosKey length] + 1];
    
        builder[j+1] = 0x00;
        [encKey appendBytes:builder length:j + 2];
    
        // Now the actual key
        [encKey appendData:iosKey];
        return encKey;
    }
    

提交回复
热议问题