首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SecItemCopyMatching始终返回存储的EC密钥的“似乎不是有效的密钥链项”

SecItemCopyMatching始终返回存储的EC密钥的“似乎不是有效的密钥链项”
EN

Stack Overflow用户
提问于 2020-10-02 11:55:53
回答 1查看 408关注 0票数 0

我有一个函数,它使用以下方法在iOS密钥链中创建一个新密钥:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func initialize(_ keyTag: String) throws -> DeviceBindingParameters {
    let tag = keyTag.data(using: .utf8)!
    let attributes: [String: Any] =
            [kSecAttrKeyType       as String: kSecAttrKeyTypeECSECPrimeRandom,
             kSecAttrKeySizeInBits as String: 256,
             kSecPrivateKeyAttrs   as String: [
                kSecAttrIsPermanent    as String: true,
                kSecAttrLabel          as String: tag,
                kSecAttrApplicationTag as String: tag
             ]
            ]

    ... other stuff
}

此外,还有一个函数可以检查该键是否存在:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
open func doesKeyExist(_ keyTag: String) -> Bool {
    let tag = keyTag.data(using: .utf8)!
    let query: [String: Any] = [
            kSecClass as String : kSecAttrKeyType,
            kSecAttrLabel as String : tag,
            kSecAttrApplicationTag as String: tag,
            kSecAttrKeyType as String: kSecAttrKeyTypeECSECPrimeRandom,
            kSecReturnRef as String: true
    ]
        
    var item: CFTypeRef?
    let status = SecItemCopyMatching(query as CFDictionary, &item)
    let errorDescription = SecCopyErrorMessageString(status,nil)
    print(errorDescription)
    return status == noErr
}

我简单地一个接一个地调用这个方法(为了快速测试,我从AppDelegate.swift调用这个方法)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    do {
        try crypto.initialize("rohan-key")
        let keyStatus = try crypto.doesKeyExist("rohan-key")
            print("Key status: \(keyStatus)")
    } catch {
        print("errors")
    }

我总是得到这样的输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Optional(The specified item does not appear to be a valid keychain item.)
Key status: false

第一条消息是通过在SecCopyErrorMessageString状态下调用SecItemCopyMatching来打印的。此外,我非常确信密钥生成是有效的,因为我使用密钥来签署规范消息,通过线路发送它,然后在基于Java的后端上验证签名--所以这些部分都是完全正确的。我只是不知道为什么这个项目不坚持在密钥库中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-06 09:04:35

你在kSecClass as String : kSecAttrKeyType犯了一个小错误。kSecAttrKeyType是一个键,指示键kSecAttrKeyType的类型。因此,您应该传递正确的kSecClass,对您来说应该是kSecClassKey

我想指出的是,SecCopyErrorMessageString的输出不时会有些糟糕。始终尝试打印OSStatus,并在OSStatus上使用它。在这种情况下不会给你带来最大的点击,因为它会返回-50。但是两者的结合可以将它们唯一地定义为errSecNoSuchClass 在这里发现的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64177547

复制
相关文章
区块链节点的密钥管理
        本文主要讨论一种区块链节点的密钥管理方案。区块链节点都会有各自的私钥,将一段随机数分成两段,一段存在配置文件,一段写在节点的运行代码里,通过某种算法结合这两段随机数,生成一个对称密钥,用这个对称秘钥对私钥加密,将加密后的私钥存储在配置文件中。节点需要对交易签名时,再次通过这两段随机数生成对称秘钥,获取配置文件中已加密的私钥,通过生成的对称秘钥解密后,用解密获得的私钥对交易进行签名。
tylerwen
2020/03/19
4.7K0
.NET中的密钥加密
本教程将演示如何通过System.Security.Cryptography在.NET Framework 1.1中实现对称加密/密钥加密。
MelodyS
2018/03/12
3.1K0
.NET中的密钥加密
office 删除密钥的方式
这段时间我的 office 365 过期了,我又重新购买了一年的使用,但是我再激活确认的时候,出现了一个问题,就是我的office 默认还是 2016,而 365 显示的是已经激活,但是并没有授权,这个问题我就很纳闷了。于是我把 office 365 删除了之后又重装,发现还是没有效果。
Gorit
2021/12/09
1.5K0
office 删除密钥的方式
Dapr 入门教程之密钥存储
应用程序通常通过使用专用的 Secret 存储来存储敏感信息,如密钥和 Token,用于与数据库、服务和外部系统进行身份验证的 Secret 等。通常这需要涉及到设置一个 Secret 存储,如 Azure Key Vault、Hashicorp Vault 等,并在那里存储应用程序级别的私密数据。为了访问这些 Secret 存储,应用程序需要导入 Secret 存储的 SDK,并使用它来访问私密数据,这可能需要相当数量的代码,这些代码与应用程序的实际业务领域无关,因此在可能使用不同供应商特定的 Secret 存储的多云场景中,这将成为更大的挑战。
我是阳明
2022/09/29
5870
Dapr 入门教程之密钥存储
win下TortoiseGit密钥的配置
TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥。也就是说使用如下命令产生的密钥在TortoiseGit中不能用。 ssh-keygen -C "username@email.com" -t rsa 而基于Git的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具来生成既适用于Git的rsa密钥,也适用于TortoiseGit的ppk密钥,配置步骤如下: 1)运行TortoiseGit开始菜单中的puttyge
Marser
2018/06/25
1.2K0
DES算法中子密钥的产生
DES (数据加密标准 Data Encryption Standard),因密钥长度过短及可能含有的后门引起争议,现也已经不在作为标准,由AES取代。在学了《网络安全技术》关于加密算法中的DES后,写了这一篇笔记,主要写的是DES算法中子密钥的生成算法。
许杨淼淼
2019/12/29
2.7K0
密钥用法 增强密钥用法 证书类型
增强密钥用法: OpenSSL 增强密钥用法:
BUG弄潮儿
2022/06/30
2.2K0
DES算法中子密钥的产生
DES (数据加密标准 Data Encryption Standard),因密钥长度过短及可能含有的后门引起争议,现也已经不在作为标准,由AES取代。在学了《网络安全技术》关于加密算法中的DES后,
许杨淼淼
2018/07/11
2.1K0
密钥详解
在之前的文章中,我们讲到了对称密码,公钥密码,消息认证码和数字签名等密码学的技术,这些技术中都使用到了一个叫做密钥的东西。
程序那些事
2020/07/08
2.2K0
非对称密钥沉思系列(4):密钥交换
密钥交换,也有称作密钥协商,这套机制,最主要的作用是用来得到通信双方的临时会话密钥。
bowenerchen
2023/01/04
7.1K13
非对称密钥沉思系列(4):密钥交换
windows10产品密钥永久(windows激活密钥)
这就是Windows Key Viewer变得有用的时候,因为可以轻松显示产品密钥。
全栈程序员站长
2022/07/28
6.7K0
windows10产品密钥永久(windows激活密钥)
共享密钥加密与公开密钥加密
加密数据的方法可以分为两种:加密和解密都使用相同密钥的“共享密钥加密”和分别使用不同密钥的“公开密钥加密”。
神奇的程序员
2022/04/10
2.9K0
共享密钥加密与公开密钥加密
Key attestation-Google的密钥认证
Android的密钥库已经有很多年了,它为应用程序开发者提供了一种使用加密密钥进行验证和加密的方法。 Keystore将密钥保留在应用程序的进程空间之外,以便应用程序不会无意中将其泄露给可能被钓鱼的用户,通过其他渠道泄漏,或者在应用程序遭到破坏时。 许多设备还为安全硬件中的密钥库密钥提供了基于硬件的安全性,从而将密钥材料完全保留在Android系统之外,从而即使Linux内核泄露也不会泄露密钥材料。 在绝大多数Android设备中,安全硬件是主CPU的特殊模式,硬件强制与Linux内核和Android用
安智客
2018/02/24
7.2K0
Key attestation-Google的密钥认证
【已解决】您所使用的密钥ak有问题,不支持jsapi服务,可以访问该网址了解如何获取有效密钥。
注册成为开发者 如果还没注册百度地图api账号的,点击以后就进入这个界面。这时候你就点击右上角的”api控制台“点击进入,会跳转到注册页面。完成注册后再点击申请密钥。
Maynor
2023/09/12
3660
【已解决】您所使用的密钥ak有问题,不支持jsapi服务,可以访问该网址了解如何获取有效密钥。
【计算机网络】网络安全 : 对称密钥分配 ( 密钥分配 | 密钥分配中心 KDC | 对称密钥分配 | 密钥分配协议 | Kerberos 协议 )
③ 密钥分配 : 是管理中的最重要的问题 , 密钥需要通过 安全通道 进行分配操作 ;
韩曙亮
2023/03/28
6.8K0
【计算机网络】网络安全 : 对称密钥分配 ( 密钥分配 | 密钥分配中心 KDC | 对称密钥分配 | 密钥分配协议 | Kerberos 协议 )
vs2012密钥_ultimate2012产品密钥
Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC;KCW6-BPFPF-BT8C9-7DCTH-QXGWC
全栈程序员站长
2022/11/04
3.2K0
配置多个git账号的ssh密钥
我们在工作中会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目。出于各种原因,自己的 github 项目无法使用公司的 git 账号,于是我们可以为自己的 github 创建一个新的 git 账号,这就需要生成新的 ssh 密钥。 下面总结了创建多个互相独立的 ssh 密钥的步骤(以公司的和自己 github 的为例)。
xiaoxi666
2018/12/13
2.2K0
Autopilot浮现 微软的云计算密钥
作为微软首席执行官,萨蒂亚·纳德拉可能还是位初来乍到的新人,但他对于该公司的关键性内部工具以及与Amazon及谷歌开展竞争的方案早已非常熟稔:这正是名为Autopilot的一款复杂度极高的软件系统。 Autopilot是一款帮助微软将数百万台服务器以及上万PB海量数据融合成一整套庞大强劲计算及存储资源池的工具。如果没有Autopilot,纳德拉之前所领导的服务器与工具、在线服务、搜索与广告乃至云与企业部门都将变得一塌糊涂、完全没有可靠性可言。 谈到使用Autopilot的感受,Windows Azure业务
静一
2018/03/15
1.9K0
Autopilot浮现 微软的云计算密钥
金融行业常见的几种密钥体系
金融行业对于数据安全的要求比较高,因此金融行业常用密钥体系是有比较强的安全性和参考性,可以作为云厂商或者其他业务的参考,简单整理了下金融行业集中常见的密钥体系。
顽石915
2019/02/25
3.9K0
SSH 密钥类型
GitHub 改变了他们的安全协议,不再允许使用使用 SHA-1 加密算法的 RSA 密钥进行访问,而我目前使用 ssh 默认策略生成的就是这种类型的密钥,结果就是无法提交代码。
宋天伦
2023/10/21
6800

相似问题

iOS密钥链问题。由于SecItemCopyMatching(),SecKeyRef始终为null

30

Xcode 8.3“指定的密钥链不是有效的密钥链文件。

11

iOS密钥链,存储更多kSecValueData项

12

没有有效的xcode密钥链

10

提供的密钥不是有效的Google密钥

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文