开发者

RSA and Objective c

开发者 https://www.devze.com 2023-03-17 19:59 出处:网络
In this exemple where is(e,n,M)? const size_t BUFFER_SIZE = 64; const size_t CIPHER_BUFFER_SIZE = 1024;

In this exemple where is (e,n,M)?

 const size_t BUFFER_SIZE = 64;
    const size_t CIPHER_BUFFER_SIZE = 1024;
    const uint32_t PADDING = kSecPaddingNone;
    static const UInt8 publicKeyIdentifier[] = "com.apple.sample.publickey\0";
    static const UInt8 privateKeyIdentifier[] = "com.apple.sample.privatekey\0";

    SecKeyRef publicKey;
    SecKeyRef privateKey; 

        - (void)encryptWithPublicKey:(uint8_t *)plainBuffer cipherBuffer:(uint8_t *)cipherBuffer
        {
            NSLog(@"== encryptWithPublicKey()");

            OSStatus status = noErr;

            NSLog(@"** original plain text 0: %s", plainBuffer);

            size_t plainBufferSize = strlen((char *)plainBuffer);
            size_t cipherBufferSize = CIPHER_BUFFER_SIZE;
            SecKeyRef key=[self getPublicKeyRef];

            NSLog(@"SecKeyGetBlockSize() public = %d", SecKeyGetBlockSize(key));
            //  Error handling
            // Encrypt using the public.
            status = SecKeyEncrypt([self getPublicKeyRef],
                                   PADDING,
                                   plainBuffer,
                                   plainBufferSize,
                                   &cipherBuffer[0],
                                   &cipherBufferSize
                                   );
            NSLog(@"encryption result code: %d (size: %d)", status, cipherBufferSize);
            NSLog(@"encrypted text: %s", cipherBuffer);
        }


- (SecKeyRef)getPublicKeyRef {
    OSStatus resultCode = noErr;
    SecKeyRef publicKeyReference = NULL;

    if(publicKey == NULL) {
        NSMutableDictionary * queryPublicKey = [[NSMutableDictionary alloc] init];

        NSData *publicTag = [NSData dataWithBytes:publicKeyIdentifier

 开发者_如何学编程                                          length:strlen((const char *)publicKeyIdentifier)]; 

        // Set the public key query dictionary.
        [queryPublicKey setObject:(id)kSecClassKey forKey:(id)kSecClass];

        [queryPublicKey setObject:publicTag forKey:(id)kSecAttrApplicationTag];

        [queryPublicKey setObject:(id)kSecAttrKeyTypeRSA forKey:(id)kSecAttrKeyType];

        [queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecReturnRef];

        // Get the key.
        resultCode = SecItemCopyMatching((CFDictionaryRef)queryPublicKey, (CFTypeRef *)&publicKeyReference);
        NSLog(@"getPublicKey: result code: %d", resultCode);

        if(resultCode != noErr)
        {
            publicKeyReference = NULL;
        }

        [queryPublicKey release];
    } else {
        publicKeyReference = publicKey;
    }

    return publicKeyReference;
}


n is not in the example, since you only encrypt here, and this is done with the public key, not the private key.

m is plainBuffer.

e is in publicKey which is retrieved with [self getPublicKeyRef].

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号