作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试生成一个私钥,该私钥仅在使用设备代码或当前的生物识别数据集(已在设备上注册)时才能访问。
当我在设备上注册了手指时,它就可以工作,然后就一切顺利了。但是如果我删除我注册的“touchid-finger”,并尝试生成一个新 key ,那么它会返回 nil
错误代码是-25293
代码示例:
func generateKey() -> SecKey?{
var error: Unmanaged<CFError>?
let accessControl = SecAccessControlCreateWithFlags(
kCFAllocatorDefault,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
[.devicePasscode,.or,.biometryCurrentSet],
nil)
let attributes:[String : Any] = [kSecAttrType as String: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits as String:4096,
kSecPrivateKeyAttrs as String: [
kSecAttrIsPermanent:true,
kSecAttrCanSign: true,
kSecAttrApplicationTag: "yes.its.my.tag",
kSecAttrAccessControl:accessControl!]]
let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error)
if(error != nil || privateKey == nil) {
fatalError("explode Kittens")
}
return privateKey
}
仅供引用。它实际上可以在模拟器上运行,但不能在真实设备上运行。
我做错了什么吗?这是否按预期工作?这是一个错误吗? (太多问题了:D)
最佳答案
“问题与项目的创建/创建方式有关,而这不是这些标志控制的。
事实上,要使 .biometryCurrentSet 在使用时具有任何意义,在创建时实际上必须存在一组当前的生物识别信息,我认为这就是 errSecAuthFailed 的来源。
如果没有可用的生物识别技术,我的建议是手动回退到仅使用 .devicePasscode。有两种方法:A. 捕获错误并重试 B. 使用 LocalAuthentication 框架预检请求。”
苹果说不行:D
关于如果设备上仅设置了 devicecode,IOS 无法创建私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58445519/
我是一名优秀的程序员,十分优秀!