首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在coredata中存储大小为4096的kSecAttrKeyTypeRSA类型的公钥和私钥,而不是密钥链

在CoreData中存储大小为4096的kSecAttrKeyTypeRSA类型的公钥和私钥,而不是密钥链,可以按照以下步骤进行:

  1. 创建一个CoreData模型,包含一个实体(Entity)用于存储公钥和私钥的属性。可以为公钥和私钥分别创建两个属性,属性类型选择Binary Data。
  2. 在应用程序中,使用Security框架生成4096位的RSA密钥对。可以使用SecKeyGeneratePair函数来生成密钥对,指定密钥类型为kSecAttrKeyTypeRSA,密钥大小为4096。
  3. 将生成的公钥和私钥转换为NSData类型,以便存储到CoreData中。可以使用SecKeyCopyExternalRepresentation函数将密钥转换为NSData。
  4. 使用CoreData的NSManagedObjectContext来创建一个新的实体对象,并将公钥和私钥的NSData数据分别赋值给对应的属性。
  5. 调用NSManagedObjectContext的save方法将实体对象保存到CoreData数据库中。

以下是一个示例代码,演示如何在CoreData中存储大小为4096的kSecAttrKeyTypeRSA类型的公钥和私钥:

代码语言:txt
复制
import CoreData
import Security

// 创建CoreData模型
let modelURL = Bundle.main.url(forResource: "YourDataModel", withExtension: "momd")!
let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL)!
let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)
let managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator

// 生成RSA密钥对
let privateKeyAttr: [String: Any] = [
    kSecAttrIsPermanent as String: true,
    kSecAttrApplicationTag as String: "com.example.privatekey",
    kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
    kSecAttrKeySizeInBits as String: 4096
]
let publicKeyAttr: [String: Any] = [
    kSecAttrIsPermanent as String: true,
    kSecAttrApplicationTag as String: "com.example.publickey",
    kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
    kSecAttrKeySizeInBits as String: 4096
]
var publicKey, privateKey: SecKey?
SecKeyGeneratePair(privateKeyAttr as CFDictionary, publicKeyAttr as CFDictionary, &publicKey, &privateKey)

// 转换密钥为NSData
var error: Unmanaged<CFError>?
let publicKeyData = SecKeyCopyExternalRepresentation(publicKey!, &error) as Data
let privateKeyData = SecKeyCopyExternalRepresentation(privateKey!, &error) as Data

// 创建CoreData实体对象并保存
let entity = NSEntityDescription.entity(forEntityName: "KeyPair", in: managedObjectContext)!
let keyPair = NSManagedObject(entity: entity, insertInto: managedObjectContext)
keyPair.setValue(publicKeyData, forKey: "publicKey")
keyPair.setValue(privateKeyData, forKey: "privateKey")

do {
    try managedObjectContext.save()
    print("Key pair saved successfully.")
} catch {
    print("Failed to save key pair: \(error)")
}

在上述示例中,假设你已经创建了一个名为"YourDataModel"的CoreData模型,并在模型中定义了一个名为"KeyPair"的实体,该实体包含名为"publicKey"和"privateKey"的Binary Data属性。

请注意,这只是一个示例代码,你需要根据你的实际情况进行适当的修改和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

windows安装openssh并通过生成SSH密钥登录Linux服务器

DSA密钥必须恰好是1024位(FIPS 186-2 标准要求)。 -C comment 提供一个新注释 -c 要求修改私钥文件注释。本选项只支持 RSA1 密钥。...程序将提示输入私钥文件名、密语(如果存在)、新注释。 -D reader 下载存储在智能卡 reader 里 RSA 。...-i 读取未加密SSH-2兼容私钥/文件,然后在 stdout 显示OpenSSH兼容私钥/。 该选项主要用于从多种商业版本SSH中导入密钥。 -l 显示文件指纹数据。...它也支持 RSA1 私钥。 对于RSADSA密钥,将会寻找对应文件,然后显示其指纹数据。 -M memory 指定在生成 DH-GEXS 候选素数时候最大内存用量(MB)。...-f :指定密钥文件名 -C:指定密钥注释 在命令行工具输入“ssh-keygen -t rsa -b 4096 -C “192.168.1.1”” 提示以下信息,这里我设置密钥位数4096默认为2048

7K31

Git 使用 GPG keys 进行签名

在提示时,指定想要密钥大小,或按 Enter键接受默认值。 密钥必须至少是 4096位(最大是4096位,输入最大即可)。 输入密钥有效时长。...请保持和你git账户一致信息 输入安全密码(后续启动提交签名认证时需要输入) 使用 gpg --list-secret-keys --keyid-format=long命令列出您拥有其私钥长形式...启动 GPG 密钥验证 打开 Git Bash 使用 gpg --list-secret-keys --keyid-format=long 命令列出您拥有其私钥长形式 GPG 密钥。...要存储 GPG 密钥密码,以便无需在每次对提交签名时输入该密码,我们建议使用以下工具: 对于 Mac 用户,GPG Suite 允许您在 Mac OS 密钥存储 GPG 密钥密码。...您也可以手动配置 gpg-agent 以保存 GPG 密钥密码,但这不会与 Mac OS 密钥 ssh 代理)集成,并且需要更多设置。

1.2K10
  • 何在 macOS Sierra (10.12) High Sierra (10.13) 系统上生成 SSH Keys

    当访问远程服务器例如 Vultr VPS,我们推荐使用 SSH 配合 PKE(Public Key Exchange),这种方式,提供给服务器,私钥存储在本地机器。...有一点非常重要,请记住,这些仅仅是你(通常以.pub结尾)你永远都不要暴露你私钥。 一、Key 类型 有几种不同 key 类型可以被选择。...想要更安全,你可以使用-b参数选择一个更大 key 大小,来生成 key,例如ssh-keygen -b 4096来创建一个 4096 RSA 密钥。...想要让 key 在系统上可用,并且将密码存储在系统钥匙串访问应用,我们将会需要完成一些额外步骤。注意,这仅仅是因为你不想每次使用密钥时候都被提示输入密码。...,你可以使用ssh-copy-id工具将你存储在你想访问服务器

    1.1K30

    iOS中使用RSA加密与解密

    只有模n公开幂e(通常是给16进制Data数据) 带证书,PEM格式publickey,DER格式二进制字符串加密方法 iOS能够支持证书只能支持 --- 二进制编码格式DER...下面将使用iOSkeychain内容处理 //7. tag表示写入keychainTag标签,方便以后从keychain读写这个 NSString *tag...// kSecClass是表示keychain存储类型,常见有kSecClassGenericPassword(一般密码),kSecClassInternetPassword(网络密码),kSecClassCertificate...(证书),kSecClassKey(密钥),kSecClassIdentity(带私钥证书)等 // 不同类型钥匙串项对应属性不同,这里使用kSecClassKey(密钥),对应属性有许多最重要是...kSecAttrKeyType,表示密钥类型,这里使用kSecAttrKeyTypeRSA; [publicKey setObject:(__bridge id) kSecClassKey

    4.6K40

    SSH 密钥类型及格式

    rsa 对应于SSH协议版本2RSA算法。对于RSA,建议密钥大小至少2048位;4096位更好。随着对因子分解技术显著进步,RSA正在变得过时。建议选择不同算法。...当需要在新场景中使用更安全密钥时,可以选择此类型。 ed25519 对应于SSH协议版本2ED25519算法。这是在OpenSSH添加新算法。客户端对它支持还不是普遍。...PKCS8 PKCS8格式,对应于PEM PKCS8。这是一种用于存储私钥信息通用格式。 当需要以一种标准广泛接受方式存储信息时,可以选择此格式。...PEM PEM格式,对应于PEM。这是一种用于存储私钥证书旧式格式,它最初被设计用于邮件加密。 当需要与使用PEM格式老旧系统进行交互时,可以选择此格式。...需要注意是,这些格式主要用于在不同系统或应用之间交换存储私钥。具体使用哪种格式可能取决于目标系统或应用支持哪种格式。

    1.3K40

    git多账号配置多个ssh配置

    ssh算法类型现在有 ED25519(这是一种现代且安全加密算法) RSA 第一步 查看已存在 SSH 密钥 在生成新 SSH 密钥前,请先确认是否需要使用本地已生成SSH密钥,SSH...输入密钥算法类型可选注释。 注释会出现在.pub文件,一般可使用邮箱作为注释内容。..." 这个命令用于生成一个新 SSH 密钥对,其中密钥类型 ed25519,这是一种现代且安全加密算法。...这些文件通常存储在用户夹目录下 .ssh 文件夹私钥应该保持私密,并且只被用于生成签名,则可以安全地分发给任何人,用于验证您身份。...客户端提供私钥,服务器验证与预存储是否匹配。

    38510

    Linux: gpg 签名技术学习

    其核心是基于密码学(Public Key Cryptography)技术,即使用一对密钥进行加密和解密操作。本文将深入探讨GPG签名技术,及其在数据安全应用。...此外,我们还将介绍如何生成管理密钥,尤其是ED25519算法密钥,以及如何在没有密码短语情况下配置使用这些密钥。 什么是签名技术? 签名技术是一种确保数据完整性真实性方法。...在密码学,每个用户拥有一对密钥私钥可以公开分发,私钥必须严格保密。签名技术利用这对密钥来创建和验证数字签名。...对比哈希值: 比较解密后哈希值与重新生成哈希值,如果一致,证明数据未被篡改且确实由私钥持有者签名。 GPG 签名具体实现 在GPG,实现签名验证过程非常简单。...your.email@example.com > private.key 主密钥与子密钥 在GPG,主密钥密钥加密体系两个重要概念。

    17410

    Apache NiFiJWT身份验证

    JWT实现 JWT处理更新包括以下特性: 基于Spring Security OAuth 2.0 JOSENimbus JOSE JWT库 使用RSA算法生成非对称密钥对,密钥大小4096私钥存储在应用程序内存...更新后JWT实现将HMAC SHA-256算法替换为基于RSA密钥数字签名。NiFi不是每个用户创建一个密钥,而是生成一个密钥大小4096共享密钥对。...尽管有这些改进,但还是使用了没有任何额外保护H2数据库存储对称密钥。 更新后实现利用非对称加密属性,将生成私钥``分开存储。...NiFi将当前私钥保存在内存,并将相关存储在Local State Provider。这种方法允许NiFi在应用程序重启后仍可以使用验证当前令牌,同时避免不安全私钥存储。...NiFi用户界面将过期时间戳存储在Session Storage不是将整个令牌存储在Local Storage

    4K20

    bip32(比特币改进协议)

    虽然这里描述钱包有许多功能,但并不是所有的支持客户端都需要。 该规范由两部分组成。 在第一部分,提出了用于从单个种子(seed)导出密钥对树系统。第二部分演示了如何在这样树之上构建钱包结构。...这允许例如网上商店让网络服务器每个订单或每个客户生成新地址(哈希),不使网络服务器访问相应私钥(花费收到资金需要私钥)。 然而,确定性钱包通常由一个密钥对“”组成。...在网上商店例子,网络服务器不需要访问商家钱包所有;仅用于用于接收客户付款那些地址,不是例如商家花钱产生更改地址。...为了防止这些仅仅依赖于密钥本身,我们首先使用额外256位熵来扩展私钥。称为扩展对于相应私钥是相同,由32个字节组成。 我们将扩展私钥表示(k,c),k普通私钥,c码。...(如果主密钥0x00000000) 32字节:码 33字节:私钥数据(serP(K),私钥0x00 || ser256(k)) 可以通过首先添加32个校验位(从双SHA-256校验派生

    1.7K20

    何在远程 SSH 服务器创建和添加 SSH 密钥

    密钥对由私钥组成,用于加密数据,私钥用于解密数据。以下是在本地机器上生成 SSH 密钥步骤:打开终端:在本地机器上打开终端应用程序。...生成密钥对:使用以下命令生成 SSH 密钥对:ssh-keygen -t rsa -b 4096这将生成一个 4096 RSA 密钥对。您可以选择其他密钥类型位数,但 RSA 是最常用。...生成密钥对:系统会生成(id_rsa.pub)私钥(id_rsa)文件,并显示密钥指纹等相关信息。2....将粘贴到 authorized_keys 文件:将之前复制内容粘贴到打开 authorized_keys 文件。确保将整个粘贴一行,并保存文件。...使用 SSH 代理后,您无需在本地机器上复制添加 SSH 密钥,而是直接使用本地机器上密钥进行远程身份验证。5. 总结本文详细介绍了如何在远程 SSH 服务器创建和添加 SSH 密钥

    5.9K30

    github添加ssh密钥,通过ssh方式推送代码

    1、密钥对生成 当在本地计算机上运行 ssh-keygen 命令时,会生成一对密钥:一个私钥(例如 id_rsa)一个(例如 id_rsa.pub)。...私钥存储在我们本地计算机上,则被添加到要访问远程服务器( GitHub)。...2、分发 将上传到 GitHub 账户设置,告诉 GitHub 你对应于你私钥,这是一一对应关系。...因为 SSH 密钥对是成对出现私钥之间有数学上关联,这意味着: 只有私钥持有者能够解密由加密信息。 可以自由分发,因为它不能用于解密由自己加密信息。...为了方便起见,你可以使用 SSH 代理( ssh-agent 或 Pageant)来管理私钥,这样在你一次会话,只需要输入一次密码短语即可。

    10010

    软件安全性测试(连载19)

    37 对称加密过程 这里明文数字,加密算法与解密算法互为逆运算(×÷),加解密密钥均为3。一般而言加密密钥私有的,解密密钥共有的,由于对称加密加解密密钥相同,所以安全性是比较差。...2)区块私钥地址 区块是通过私钥生成,然后通过来生成地址。并且要保证逆向是不可行,即不可通过地址获得,然后通过获得私钥40所示。 ?...区块根据给定G点,假设G坐标(x,y),那么P即为Kx,Ky一种组合,标记为P=GK(K私钥,P)。...44 区块椭圆曲线函数图 下面介绍一下私钥在密码学应用。...总结一下,私钥K= SHA-256(大随机字符串),P= KG(K私钥,G常量),区块地址=Base58(RIPEND160(SHA-256(P)))(P)。

    65120

    加密与安全_AES & RSA 密钥对生成及PEM格式代码实现

    通俗来说,可以公开,用来加密信息;私钥需要保密,用来解密信息。它安全性主要依赖于一个数学难题:大整数质因数分解。具体步骤如下: 选择质数:选择两个大质数pq。...密钥长度大:需要较长密钥(通常2048位或以上)来保证安全性,存储处理成本高。...RSA密钥私钥。...下发至客户端:将分发给需要加密数据客户端。 私钥保存在服务器:私钥必须保密,通常存储在服务器上,确保其不被泄露。...密钥管理是保证加密系统安全重要环节,私钥应保存在服务器上,分发给客户端。PEM格式密钥更易于阅读传输,通常用于存储交换密钥

    37500

    简明介绍比特币钱包及其安全性

    私钥决定了比特币所有权,必须保护好这个私钥。 2,地址,可以理解成256bit,也就是存放比特币地方。地址是由前面说私钥成对生成,但地址不能算出私钥。...3,区块,区块就是个“账本”,其实是本聪为了比特币所设计一个“用来去中心化存储比特币账目”数据结构,所以,本质上,区块上记录都是 A 给 B 转账了 5 个比特币这类信息,就这么简单。...账目都是去中心化存储在区块,也就是存储在比特币网络每一个节点上,并不是存储私钥或者地址上,所以,一个地址当前余额是多少,这类问题需要问区块,区块上有着比特币历史上全部账目,账目都是公开...HD钱包还带来了一些新特性,比如不需要任何私钥,就可以从一个父生成所有的子。具体来说,你私钥是以纸钱包方式备份,并且离线存放在一个安全地方。...你手头有主公,用这个,你就可以生成所有的子。 举个实际例子,我们要开一个网店,接受比特币付款。你可以离线存放你私钥,只把放在公网服务器上。

    1.4K90

    再谈加密-RSA非对称加密理解使用

    于是大大小 CA 出现了,可是每个客户端不可能把他们证书作为根证书全存储起来。 于是CA建立自上而下信任,下级 CA 信任上级 CA,下级 CA 由上级 CA 颁发证书并认证。...(接入一些支付公司中经常会提供此格式密钥,有些印象) PKCS#12: 描述个人信息交换语法标准。描述了将用户私钥、证书其他相关信息打包语法。...证书密钥文件格式 需要注意:证书文件格式与加密标准并没有严格对应关系,证书文件格式是存储证书方式不同,可能存储内容也略有不同。加密标准是使用证书文件进行加解密方式不同。...其特点: base64编码; 文件后缀 .p7p, .p7c; window或java tomcat等平台支持此类型; PKCS#12(pfx)格式 它能把服务器证书(包括),中间证书私钥存储在一起...特点: 二进制文档; 以 .pfx 或.p12后缀; 经常在windows系统内被用于导入导出证书私钥; 打开可能需要额外密码; 密钥保存 对于密钥(单指公私钥保存,并不需要特殊格式,直接将

    2.6K90

    详解 RSA 非对称加密

    于是大大小 CA 出现了,可是每个客户端不可能把他们证书作为根证书全存储起来。 于是CA建立自上而下信任,下级 CA 信任上级 CA,下级 CA 由上级 CA 颁发证书并认证。...(接入一些支付公司中经常会提供此格式密钥,有些印象) PKCS#12: 描述个人信息交换语法标准。描述了将用户私钥、证书其他相关信息打包语法。...证书密钥文件格式 需要注意:证书文件格式与加密标准并没有严格对应关系,证书文件格式是存储证书方式不同,可能存储内容也略有不同。加密标准是使用证书文件进行加解密方式不同。...其特点: base64编码; 文件后缀 .p7p, .p7c; window或java tomcat等平台支持此类型; PKCS#12(pfx)格式 它能把服务器证书(包括),中间证书私钥存储在一起...特点: 二进制文档; 以 .pfx 或.p12后缀; 经常在windows系统内被用于导入导出证书私钥; 打开可能需要额外密码; 密钥保存 对于密钥(单指公私钥保存,并不需要特殊格式,直接将

    1.6K20

    如何使用GPG加密签名邮件

    因此,在这种情况下,每个方都有自己私钥其他用户。 验证发件人身份 该系统另一个好处是消息发送者可以用他们私钥“签名”消息。...您可以通过发出以下命令来执行此操作: $ gpg --gen-key 这将带您完成一些可以配置密钥问题: 请选择您想要密钥类型:(1)RSARSA(默认) 你想要什么密钥4096 密钥有效吗?...这应该在您完成密钥对后立即完成,不是在您需要密钥对时完成。必须提前生成此吊销密钥,并将其保存在安全独立位置,以防计算机受到危害或无法运行。...消息所述,您应该考虑将证书备份到其他计算机并将其打印出来,只要您能够正确保护它。 如何导入其他用户 如果你不能接受你希望与之沟通的人其他,那么GPG将毫无用处。...幸运是,您可以简单地比较从这些密钥派生“指纹”,不是验证双方整个。这将为您提供合理保证,即您使用相同信息。

    3.6K30

    CA证书介绍与格式转换

    术语介绍 密钥对: 在非对称加密技术,有两种密钥,分为私钥用来给数据加密,用加密数据只能使用私钥解密,密钥对持有者公布给他人。...Tips: 密钥指的是私钥或者 —> 密钥 = 私钥/密钥对指的是加上私钥 —> 密钥对 = 私钥+; 非对称加密: 私钥是成对私钥唯一对应,它们互相解密。...在实际应用,通常将两者结合在一起使用,例如,对称密钥加密系统用于存储大量数据信息,公开密钥加密系统则用于加密密钥。...JKS是二进制格式,同时包含证书私钥,一般有密码保护,只能存储非对称密钥对(私钥 + x509证书)。...密钥私钥用不同密码进行保护 JKSPKCS12之间最大区别是JKS是Java专用格式,PKCS12是存储加密私钥证书标准化且与语言无关方式。

    4.7K21

    对称、非对称加密是如何工作

    密码学使用了先进数学原理方法来传输存储数据,这种存储方式要求只有数据接收者才能对数据进行读取处理。...凯撒(Caesar)首先使用凯撒密码来加密他消息:将纯文本加密密文,然后通过通信通道发送,中间过程没有任何窃听者能够阅读理解该文本。当在接收器端进行接收时,密文将被解密纯文本。...发送方接收方都必须使用相同密钥。使用相同密钥虽然也可以,但是其中存在一个问题是我们如何在共享密钥同时保证密钥不被窃听者拦截?...“非对称加密技术比对称加密技术稍微复杂一点,二者之间主要区别是:对称加密使用共享密钥来解密数据,非对称加密使用密钥对来解密数据”。 密钥对由两部分组成:私钥。...然后,接收者使用其私钥(即密码)发送者(即用户名)来对数据进行解密。这保证了数据在传输过程免受窃听者攻击,该加密系统也变得更加坚固。

    75132
    领券