2012-07-01 36 views
0

在服務器上執行AES256加密並在ios上解密。這很長時間沒有工作,但我決定在加密之前將64位編碼文本加密。php的加密問題

我偶然在base64_encode($ source)中放置了大括號,並開始工作。所以,現在這個錯誤代碼工作(解密以及對IOS):

$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, "base64_encode($source)", MCRYPT_MODE_CBC, $iv); 

和正確的事情並沒有在所有的工作:

$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, base64_encode($source), MCRYPT_MODE_CBC, $iv); 

使用PHP的蛋糕,如果使其中的差別。什麼是錯,有什麼不同?爲什麼大括號使事情工作,沒有大括號它只是解密失敗?對不起,如果這是非常愚蠢的問題,但我是密碼學的新手。

回答

0

您應該對純文本進行字符編碼(例如,使用UTF-8,PHP中有一個utf8編碼函數),然後如果要將結果作爲字符串傳輸,則base64對結果進行編碼。

請注意,mcrypt_encrypt()的輸出將與隨機字節無法區分。這意味着可以輸出任何字節,包括那些不是有效字符編碼的字節(例如00h值字節或C中的EOF)。由於IV是隨機的(有希望),有時候所有東西都會顯得非常微妙,有時由於無效字符,你的解密將失敗。如果你不完全控制(charachter)編碼/解碼原則(不是太多的加密/解密),那麼你偶爾會遇到意想不到的結果 - 只需要你需要的東西避免編程時。