2011-12-13 27 views
0

在從iPhone應用程序接收URL時,我們解密在Objective-C中創建的字符串,並將其作爲GET變量傳遞給我們的PHP網站。解碼包含空格的AES字符串

我們正在使用的解碼:

mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $padded_key, base64_decode($base64encoded_ciphertext), 'ecb'); 

這是工作正常的大部分時間,但有些時候,我們得到的字符串包含空格,例如:

mypage.php?score=IEZrdQ5iUECe9 xyfTY5Cg== 

然後解密失敗並且我們留下如下結果:

the result http://mattbee.co.uk/temp/mess.png

有沒有人有任何想法如何處理字符串與空間在他們中間,如果空間甚至存在?我會認爲編碼可能與它有關,但轉換爲UTF-8/UTF-16並沒有幫助。

任何建議非常感謝。

回答

2

Base64數據每64個字符包含一個空格,最後一個0-2等號。因此,iPhone應用程序應該在將其作爲GET變量發送之前進行百分比編碼。

0

你可以使用bin2hex,然後使用pack('H *',hex)來解碼字符串。我知道這個方法唯一的問題是字符串可能會變得非常大。

2

Base64可以表示任意字節,這正是密文所必需的。不要重新編碼到其他任何東西。

某些軟件會在base64編碼的字符串中插入空格和換行符,以適應電子郵件和其他行長度有限的格式。解碼時應忽略或刪除這些內容。

如果base64編碼的字符串中有空格,可以在解碼之前去掉它們,但我認爲base64_decode應該自動執行此操作。

另一個注意事項:不要使用ECB模式,它是不安全的。使用CBC模式(通過與消息一起發送的隨機初始化向量)。或者更好的是,不要加密部分URL,而是使用SSL(或TLS),它將處理所有的細節。

相關問題