2013-02-13 114 views
4

我想在Objective-C中将NSString加密为NSString和NSData,所以我开始搜索。初学者的AES加密/解密

我从here开始,但不幸的是,这让我头痛。

然后我发现我自己at this post,它很容易跟随,所以我一直在努力弄清楚implementation。仔细查看实现后,我看到帖子中的第二个答案,并且看到他有更多的适应性实现,这使我可以访问his gist。根据要点自述,他"took down this Gist due to concerns about the security of the encryption/decryption"。这使我相信,从上面执行的安全性也存在安全缺陷。

然而,从这个要点,他提到another alternative,我可以使用加密。在看了代码之后,我注意到它产生了与"a header, encryption salt, HMAC salt, IV, ciphertext, and HMAC"的NSData。我知道如何处理再次使用同一个库进行解码,但是如果我不知道我发给他的是什么,我怎么会把它传递给服务器人呢?

在这一切的根源,我在我的头上。鉴于我上面所说的,并且知道我没有时间为此进行大量的学习,除非这是绝对必要的,那么我应该如何最好地处理关于这种编码/解码过程,给定一个私钥将它运送到不是由我设计的服务器的最终目标是什么? (如何在句子上跑!)

回答

3

也许你应该问服务器的人?当你在各方之间进行加密时,你必须对这些数据的格式达成某种共识,原始的原语不能单独处理,更不用说很容易把事情搞砸了,仅仅处理基元和仅仅发送aes密文的愿望会导致错误。

RNCryptor你提到的是一个高级加密库,它定义了simple format,其他人也必须遵守,它很简单,因此有助于跨平台,但它有额外的,你需要做适当的AES。还有其他一些类似的库(NaCL,GPGMEKeyczar),格式不是那么简单,但使用简单,所以您需要能够在库的两端使用库,但我会高度建议你使用类似的东西,如果可以的话,而不是自己动手。因此,如果您可以在iOS(或Mac,您在客户端上定位的任何对象)上使用C++版本,那么您可能在服务器上的性能很好,有几种选择。

+0

我一直希望找到最方便的解决方案,因为做服务器端的人几乎都是安全专家。我之所以来这么做,是因为他没有意识到iOS的外观,也是一种自豪的事情(我宁愿看起来胜任,而不是在这种情况下毫无用处)。但是,你认为''它有什么额外的,你需要正确地做AES'“? – RileyE 2013-02-13 18:54:23

+2

@RileyE它的格式包括一个随机初始化向量,一个随机盐(可选,只有在使用密码而不是随机生成的密钥时才需要),并添加一个hmac标记以确保iv,salt和密文没有修改。密文的修改是许多针对AES的旁信道攻击的关键。 – jbtule 2013-02-13 19:01:52

+1

@RileyE,我还认为RNCryptor是您方面最简单的解决方案。 – jbtule 2013-02-13 19:04:03