【问题标题】:RSA public key encryption in SwiftSwift 中的 RSA 公钥加密
【发布时间】:2018-01-12 12:19:45
【问题描述】:

我将我的公钥作为字节数组包含在项目中。我想用它来加密密码。当我尝试从字节数组创建公钥时,我得到了下面给出的错误。

SecKeyCreateWithData failed :Optional(Swift.Unmanaged<__ObjC.CFError>(_value: Error Domain=NSOSStatusErrorDomain Code=-50
"RSA public key creation from data failed" UserInfo={NSDescription=RSA public key creation from data failed}))

下面是代码。

let attributes : [String : Any] = [
kSecAttrKeyType as String :  kSecAttrKeyTypeRSA,
kSecAttrKeyClass as String : kSecAttrKeyClassPublic,
kSecAttrKeySizeInBits as String : 1024 as AnyObject]

var priKeyCreateError: Unmanaged<CFError>?
_ = SecKeyCreateWithData(PublicKeyDataDevQA as Data as CFData, attributes as CFDictionary, &priKeyCreateError)

if(priKeyCreateError != nil)
{
    print("\n SecKeyCreateWithData failed :" + String(describing: priKeyCreateError));
}

我想在不使用任何第三方库(如 Swifty RSA)的情况下实现这一点。

使用的公钥可用 here

【问题讨论】:

  • 请同时包含十六进制的公钥字节。否则,这个问题无法回答,必须关闭。密钥大小不应该是CFNumber 类型吗? PS Winterbash 结束了,该网站应该摘掉你的帽子 ;)
  • @MaartenBodewes 我已经用公钥更新了问题
  • 那个“键”看起来像编码的 ASCII 或 UTF-8。密钥应该是二进制格式,可能是 PKCS#1 或 SubjectPublicKeyInfo(在 X.509 中指定)。

标签: ios swift encryption cryptography


【解决方案1】:

您的密钥由 ASCII 编码的 PEM 组成。为了能够读取密钥,您可能需要对 PEM 进行解码(基本上是 base 64 解码中间的部分)。

【讨论】:

  • 感谢您抽出宝贵时间回答问题。它会帮助其他人,而不仅仅是提出问题的人
  • 你能告诉我你是怎么做到的吗?
  • 这里有一个详细的答案,如果你需要 ASN.1 解析器,你可以不使用任何库来做到这一点。 stackoverflow.com/a/57471615/1908892
猜你喜欢
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 2021-03-14
  • 2011-11-10
  • 2014-06-23
  • 2018-06-07
相关资源
最近更新 更多