代码之家  ›  专栏  ›  技术社区  ›  Paul

iPhone/Objective-C RSA加密

  •  3
  • Paul  · 技术社区  · 15 年前

    我一直在谷歌搜索并研究如何在iPhone上使用cbjective-c进行简单的RSA加密。我的主要问题是,我已经得到了指数和模量作为 NSData 对象,然后我需要将它们转换为 SecKeyRef 对象以执行RSA加密。

    有人知道怎么做吗?或者有什么有用的提示吗?

    多谢!

    2 回复  |  直到 13 年前
        1
  •  2
  •   Paul    15 年前

    我最终在我的项目中使用了OpenSSL。导入密钥并使用该库而不是iPhone库进行加密。

        2
  •  0
  •   StCredZero    13 年前

    我实现了一个解决方案,并将其放到GitHub上。现在,您可以使用由苹果批准的API来代替openssl。(不幸的是,他们在文献中不鼓励opensl。)

    https://github.com/StCredZero/SCZ-BasicEncodingRules-iOS

    SCZ基本编码规则iOS

    实现基本编码规则,以便将RSA密钥导入iOS 使用指数的键链。代码以IOS 5和ARC为目标。

    假设你已经有了一个模量和指数 在名为pubkeymoddata和 PUBKEY MODEDATA。然后下面的代码将创建一个包含该RSA的nsdata 公钥,然后可以将其插入iOS或OS X密钥链。

    NSMutableArray *testArray = [[NSMutableArray alloc] init];
    [testArray addObject:pubKeyModData];
    [testArray addObject:pubKeyExpData];
    NSData *testPubKey = [testArray berData];
    

    这将允许您使用apple cryptoexercise示例中seckeywrapper的addpeerPublicKey:keybits:method存储密钥。或者,从低级API的角度来看,您可以使用SecItemAdd()。

    NSString * peerName = @"Test Public Key";
    
    NSData * peerTag = 
       [[NSData alloc] 
           initWithBytes:(const void *)[peerName UTF8String] 
           length:[peerName length]];
    
    NSMutableDictionary * peerPublicKeyAttr = [[NSMutableDictionary alloc] init];
    
    [peerPublicKeyAttr 
       setObject:(__bridge id)kSecClassKey 
       forKey:(__bridge id)kSecClass];
    [peerPublicKeyAttr 
       setObject:(__bridge id)kSecAttrKeyTypeRSA 
       forKey:(__bridge id)kSecAttrKeyType];
    [peerPublicKeyAttr 
       setObject:peerTag 
       forKey:(__bridge id)kSecAttrApplicationTag];
    [peerPublicKeyAttr 
       setObject:testPubKey 
       forKey:(__bridge id)kSecValueData];
    [peerPublicKeyAttr 
       setObject:[NSNumber numberWithBool:YES] 
       forKey:(__bridge id)kSecReturnPersistentRef];
    
    sanityCheck = SecItemAdd((__bridge CFDictionaryRef) peerPublicKeyAttr, (CFTypeRef *)&persistPeer);
    
    推荐文章