【发布时间】:2017-11-11 11:43:26
【问题描述】:
我要提前说我对密码学不太了解(仅限基础知识)。我正在尝试实现凭据 OpenHome 服务,并且我想加密密码以将其发送到设备。
设备提供了一个用 C 语言编写的函数,它返回一个如下所示的公钥字符串:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzjFGuEKD0uWxzb47oRbiSP2uDwVJPeWU7m9VXi626V6lameTzdtwj2eYVZTIAsAW7yW4or2skn7oHqFG4GvhMzgMwoQjKFxeCPPFXRSotnt26AN1DhvFJp3V/d+MpmkzI07iWcD5eNe4EVNK9GSE4JOEHhJ/JYBVMiu04XE5aqwIDAQAB
Android 实现已经完成,给出的规格是
RSA/ECB/OAEPWithSHA-256AndMGF1Padding
还有一个网站在加密时给出“说明”
http://wiki.openhome.org/wiki/Av:Developer:CredentialsService
到目前为止,我已经尝试过这些库:
SwiftyRSA、Heimdall、SwCrypt
我真的认为我的主要失败之一是我不明白我拥有什么、我需要什么以及最终如何使用 swift 来实现它。
理想情况下,我最终会拥有类似
的功能func encryptMessage(message:String, whithPublicKey key:String)->String
非常感谢。
【问题讨论】:
-
不确定您的错误或障碍是什么!该过程看起来您需要使用 RSA 中的服务器共享的公钥,使用 ECB 块密码和 OAEP 填充来生成密码的加密消息并将其发送回服务器。 OAEPWithSHA-256AndMGF1Padding 是一个非常不寻常的,所以只需检查哪些库支持它。
-
公钥由服务器提供。所以我假设服务器有一个用于解密消息的私钥。我想知道如何使用提供的公钥和规范加密消息。
-
"到目前为止我已经尝试过这些库..." ...然后呢?什么地方出了错?这些尝试之一的代码在哪里?
-
用算法
rsaEncryptionOAEPSHA256查看SecKeyCreateEncryptedData。如果它开箱即用,并且您了解如何使用它,那就太好了。如果您需要更多帮助,这超出了我在 StackOverflow 答案中所能做的,并且可能需要 iOS 上的非平凡代码(许多加密算法仅在 macOS 上受支持)。如果没有其他人可以指导您完成它,并且您有一些预算,我很乐意讨论咨询协议。请注意,这里的标准算法是 SHA-1,并且得到更广泛的支持。如果您可以更改服务器,那可能会对您有所帮助。
标签: ios swift encryption swift3