2013-03-20 41 views
1

我正在實施AES128位加密/解密在iOS應用程序中用於從.net服務器發送/接收數據,我幾乎完成,但在單元測試期間,我在加密字符串中遇到了一些問題,一些加密的字符串與.net服務器上的不相似,可以說98%的字符串在兩端都是正確的,但問題出現在2%的字符串中,當我匹配雙方加密的字符串,然後在iOS端找到生成的字符串時, .net結束它是很長的字符串。還有一件事我發現iOS字符串是.net字符串的子字符串。當我試圖解密iOS生成的加密字符串時,它不解密顯示爲空,但當我嘗試解密.net服務器生成的加密字符串(它比iOS大)時,我可以選擇解密的字符串。AES128位加密字符串與上不相似.net

使用相同的KEY(服務器和iOS端的長度爲16個字符)。

能否請您提出解決方案或我錯在哪裏。

非常感謝大家。

原始字符串: 「CUSTID = 10 &模式= 1」 KEY = 「PasswordPassword」

在iOS的加密字符串: r51TbJpBLYDkcPC + Ei6Rmg ==

在.NET encrpted字符串: r51TbJpBLYDkcPC + Ei6RmtY2fuzv3RsHzsXt/RpFxAs =

用於加密的填充= kCCOptionPKCS7Padding;

我按照這個教程。 http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iphone/

+0

發表你的iOS代碼,我認爲它可能是你的緩衝區的大小,我最近有一個類似的問題 – SeanLintern88 2013-03-20 11:04:18

+0

我修復了這個問題,我從這個鏈接獲得解決方案,用戶分享他們的實現經驗:http:// automagical .rationalmind.net/2009/02/12/aes-互操作性 - 網絡和iphone/ – 2013-03-20 11:30:52

回答

1

A similar question found on CryptoSE

我的版本TL; DR

本質.NET和iOS設備有不同的實現,因爲你是下面的指南是從2009年我就想到,這是相當出到現在爲止,從那以後,每個平臺至少有一次重大修改。

原來的答覆提供了以下答案:

我可以馬上想到的原因有四:

  1. 他們都沒有使用AES256

    。我在Obj-C文檔中看到他們使用AES256的直接聲明(除非您故意更改它),我沒有在Visual Basic文檔中看到任何聲明他們使用的密鑰大小的聲明(除非他們是這樣意思是「塊位」)。

  2. 不同的鍵。 AES256採用256位密鑰;沒有一種標準的方法可以將五個字符的字符串轉換成一個256位的值。現在有很多可能的方法;沒有特別的保證,他們都使用相同的。

  3. 不同的操作模式。 AES分組密碼採用128位值,並將其轉換爲128位值。但是,並不是所有的消息都可以適用於128位,另外,除了消息加密外,有時候還有其他一些我們想要做的事情。操作模式是一種採用分組密碼的方法,並將其用作執行一些更普遍有用的功能(例如加密更長的消息)的工具。有許多標準的操作模式,Obj-C文件指出它使用CBC模式; Visual Basic文檔有可怕的聲音,這可能是CBC模式的一個亂碼。

  4. IVs。某些操作模式(如CBC模式)使加密器隨機選擇一個「初始化向量」;可以與加密的消息一起轉換(因爲解密器將需要該值)。如果您第二次加密該消息,則此初始化向量所做的一件事情是,第二個密文根本不會類似第一個密文;這樣,有人傾聽就無法推斷出你只是重複了一條消息。 Obj-C文件特別說明它會選擇一個隨機的IV(除非你自己給出一個)。

  5. 正如你所看到的,這兩個密文可能會有不同的原因。你可以嘗試的一件事情是:將密文從一個密鑰交給另一個,並要求他們解密密文;如果可以的話,你可以確信雙方都在做基本相同的事情。

+0

謝謝瑞安,我會檢查你的建議理由 – 2013-03-20 10:28:17

0

正如你可以看到,有一堆的理由兩個密文可能會有所不同。你可以嘗試的一件事情是:將密文從一個密鑰交給另一個,並要求他們解密密文;如果可以的話,你可以確信雙方都在做基本相同的事情。

+1

這不會提供一個問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – 2015-02-19 11:17:51

+0

@DanielKelley我看到了合適的答案,並且有所幫助。如您所知,第一個選項是可用的。有些新人沒有什麼可供選擇的迴應,我在第一次遇到SO時遇到了類似的困境。 – zaph 2015-02-19 11:36:30