- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试从已生成的 key 对(两个 SecKeyRef
)中提取一个 1024 位 RSA 公钥,以便通过网络发送它。我只需要一个普通的 (modulus, exponent)
对,它应该正好占用 131 个字节(128 个用于模数,3 个用于指数)。
但是,当我将 key 信息作为 NSData
对象获取时,我得到的是 140 位而不是 131 位。这是一个示例结果:
<30818902 818100d7 514f320d eacf48e1 eb64d8f9 4d212f77 10dd3b48 ba38c5a6
ed6ba693 35bb97f5 a53163eb b403727b 91c34fc8 cba51239 3ab04f97 dab37736
0377cdc3 417f68eb 9e351239 47c1f98f f4274e05 0d5ce1e9 e2071d1b 69a7cac4
4e258765 6c249077 dba22ae6 fc55f0cf 834f260a 14ac2e9f 070d17aa 1edd8db1
0cd7fd4c c2f0d302 03010001>
在重试 key 生成几次并比较生成的 NSData
对象后,所有 key 保持相同的字节是前 7 个字节:
<30818902 818100>
最后三个字节看起来像指数(65537,一个常见的值)。 “模数”和指数之间也有两个字节:
<0203>
有更多加密经验的人可以帮助我识别这是什么编码吗?德尔?如何正确解码模数和指数?
我尝试使用手动剥离模数和指数
NSData* modulus = [keyBits subdataWithRange:(NSRange){ 7, 128 }];
NSData* exponent = [keyBits subdataWithRange:(NSRange){ 7 + 128 + 2, 3 }];
但是在尝试解密远程主机使用该“ key ”编码的数据时出现错误。
编辑:
这是我最终用来解压 RSA blob 的解决方案的要点:https://gist.github.com/vl4dimir/6079882
最佳答案
假设您希望该解决方案在 iOS 下运行,请查看 this thread .该帖子确认编码为 DER,并展示了如何从您开始使用的 NSData
对象中提取指数和模数。
还有另一种解决方案不适用于 iOS,但适用于在 this thread 中安装了 OpenSSL 的桌面系统(包括 MacOS X) .即使您正在寻找仅限 iOS 的解决方案,您仍然可以使用它来验证您的代码是否正常工作。
关于iOS SecItemCopyMatching RSA 公钥格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12934743/
我在下一个代码中出现内存泄漏。我的灵感来自here这是RSA算法的一部分。 - (SecKeyRef)getPublicKeyRef { OSStatus resultCode = noErr; Se
我想在运行时将 OSX/iOS 证书导入到 OpenSSL 上下文中。为此,我使用带有以下代码的 SecItemCopyMatching 从操作系统钥匙串(keychain)中检索证书: CFMuta
首先,我观看了关于使用钥匙串(keychain)保护 secret 的 WWDC 2013 session 。我想做一个基本的密码存储。观看了整个视频,但在视频的前 10 分钟找到了我需要的内容。看起
我的方法: +(SecKeyRef)getKeyByTagWithoutAlert:(NSString *)keyTag status:(OSStatus *) status{ *status
与 REST API 通信并将 API token 保存在 iOS 的钥匙串(keychain)中。但钥匙串(keychain)代码抛出 nil 错误。 KeychainAccess.swift: p
我正在尝试使用钥匙串(keychain)服务来保存一个值,即使用户重新安装应用程序,该值也会持续存在。所以我使用 SecItemCopyMatching 检查一个项目是否存在,它第一次返回 errSe
我正在将一个项目添加到钥匙串(keychain),然后我想获取该项目的值(value)。问题是,它原来是一个空字符串。我究竟做错了什么?谢谢! //add item to keychain NSDic
我正在尝试从已生成的 key 对(两个 SecKeyRef)中提取一个 1024 位 RSA 公钥,以便通过网络发送它。我只需要一个普通的 (modulus, exponent) 对,它应该正好占用
我的应用程序中有以下代码片段。 CFTypeRef result = nil; OSStatus userPresenceStatus = SecItemCopyMatching((_
我无法让此调用适用于 IOS。我尝试了多种方法,但似乎没有任何效果:我总是获得 errSecParam 状态。谁能告诉我我做错了什么? 我开始使用它来获取我从字节中提取的证书的属性列表。那没有用,所以
我正在尝试使用 CryptoExercise 的 SecKeyWrapper addPeerPublicKey:keyBits: 方法将 RSA 公钥添加到我的 iPhone 钥匙串(keychain
KeychainTouchID应用程序是使用 Xcode 安装并执行的。 key 是通过按“添加 protected key ”生成的,并通过按“使用 protected key ”使用。 key 是
我从 Stack Overflow 上抓取了代码来访问一些网络浏览器密码。只要密码在登录钥匙串(keychain)中,它就可以很好地工作。在某些时候,我感兴趣的特定帐户已移至 iCloud 钥匙串(k
我使用 Veracode 扫描我的应用程序并出现以下错误未检查的错误条件。这是我的代码: let status = withUnsafeMutablePointer(to: &queryRes
所以我的问题是关于钥匙串(keychain)访问是如何工作的。如果我已经使用 kSecAttrAccessible 属性集将一个项目保存到钥匙串(keychain),并且如果我想稍后查询这个项目,我是
我想在我的 iOS 应用程序中支持多个帐户,并且我正在使用 KeyChain 来存储凭据。我正在存储具有相同类 (kSecClassGenericPassword) 和属性 (kSecAttrServ
我正在使用 SecItemCopyMatching 获取受 Touch ID 保护的钥匙串(keychain)项。 但是,如果 Touch ID 解锁失败(或用户选择“输入密码”),我想展示我自己的
我在 SecItemCopyMatching 上发现内存泄漏。经过对 SF 的调查,我找到了解决方案: __block NSString *certificateName = nil; SecKeyc
我正在尝试通过 FaceID 解锁钥匙串(keychain)/安全区域中的数据,并使其在用户 session 期间可访问(无需额外解锁)。 Per the documentation for kSec
我正在为我们的 iPhone 应用程序实现 SSL 客户端身份验证,并使用应用程序钥匙串(keychain)来存储客户端身份(证书 + 私钥)。将项目添加到钥匙串(keychain)后,我在使用 Se
我是一名优秀的程序员,十分优秀!