我一直在搜索钥匙串存储安全飞地或其他任何地方的位置,我发现了很多文章(this stackoverflow answer之一),其中说明如下,但我正在寻找一些经过身份验证的 Apple 声明
钥匙串存储加密的密钥(和其他小数据)并限制对该数据的访问。此外,在最近的 iPhone(5S 及更高版本)中,钥匙串位于一个单独的处理器中,即安全隔区,它额外限制了访问。在 iOS 中没有更安全的方法来存储密钥。
所以我的查询基于上述声明。
CFTypeRef存储在哪里为什么我们kSecAttrTokenIDSecureEnclave在创建密钥对时使用它。(以下代码示例)。
-(bool) generateKeyPairWithAccessControlObject:(SecAccessControlRef)accessControlRef
{
CFMutableDictionaryRef accessControlDict = newCFDict;;
CFDictionaryAddValue(accessControlDict, kSecAttrAccessControl, accessControlRef);
CFDictionaryAddValue(accessControlDict, kSecAttrIsPermanent, kCFBooleanTrue);
CFDictionaryAddValue(accessControlDict, kSecAttrLabel, kPrivateKeyName);
// create dict which actually saves key into keychain
CFMutableDictionaryRef generatePairRef = newCFDict;
CFDictionaryAddValue(generatePairRef, kSecAttrTokenID, kSecAttrTokenIDSecureEnclave);
CFDictionaryAddValue(generatePairRef, kSecAttrKeyType, kSecAttrKeyTypeEC);
CFDictionaryAddValue(generatePairRef, kSecAttrKeySizeInBits, (__bridge const void *)([NSNumber numberWithInt:256]));
CFDictionaryAddValue(generatePairRef, kSecPrivateKeyAttrs, accessControlDict);
OSStatus status = SecKeyGeneratePair(generatePairRef, &publicKeyRef, &privateKeyRef);
if (status != errSecSuccess)
return NO; …Run Code Online (Sandbox Code Playgroud)我有那个项目结构:
-gradle root
|-clients
|-client 1
|-client 2
...
|-client N
|-libs
|-android lib 1
|-android lib 2
...
|-android lib N
|-java lib 1
|-java lib 2
...
|-java lib N
Run Code Online (Sandbox Code Playgroud)
在每个客户端构建文件中,我都要packagingOptions排除选项.像这样的东西:
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
Run Code Online (Sandbox Code Playgroud)
我如何优化该块并将其移动到例如我的根gradle构建文件中?我真的不想将它粘贴到所有客户端.