我有模数和指数。如何在iPhone上使用RSA算法对数据进行编码/解码?或者我如何从模数和指数生成DER格式?
答案 0 :(得分:2)
如果你想在iPhone上生成DER数据,我在GitHub上有代码可以让你这样做:
https://github.com/StCredZero/SCZ-BasicEncodingRules-iOS
实施基本编码规则以启用将RSA密钥导入iOS KeyChain使用指数。代码针对带有ARC的iOS 5。
假设您已经拥有模数和指数 RSA公钥作为名为pubKeyModData和变量的变量中的NSData pubKeyModData。然后,以下代码将创建包含该RSA的NSData 公钥,然后您可以将其插入iOS或OS X Keychain。
NSMutableArray *testArray = [[NSMutableArray alloc] init];
[testArray addObject:pubKeyModData];
[testArray addObject:pubKeyExpData];
NSData *testPubKey = [testArray berData];
这将允许您使用Apple CryptoExercise示例中的SecKeyWrapper中的addPeerPublicKey:keyBits:方法存储密钥。或者,从低级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);