2013-02-13 113 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