0

PHPで何かを暗号化すると、iOSアプリで復号化できない理由を一生理解できませんが、PHPはiOSで暗号化された文字列を復号化し、その間で復号化/暗号化できます。

PHP->Obj-Cが失敗します。

はい、私はネットを調べましたが、私が見つけた唯一の解決策は、私がすでに行っているものを使用CBCすることでした。PHP

iOS用のライブラリを使用していFBEncryptorます。これらはPHPの暗号化/復号化機能です。

function encrypt($decrypted)
{    
    $iv = ''; for($i=0;$i<16;$i++){ $iv .= "\0";}
    $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $passKey, $decrypted, MCRYPT_MODE_CBC, $iv);
    $ciphertext = base64_encode($ciphertext);
    return $ciphertext;
}

function decrypt($encrypted)
{
    $iv = ''; for($i=0;$i<16;$i++){ $iv .= "\0";}        
    $ciphertext = base64_decode($encrypted);
    $plaintext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $passKey, $ciphertext, MCRYPT_MODE_CBC, $iv);
    return $plaintext;
}
4

2 に答える 2

0

私はなんとか問題を解決することができました。パスキー変数に関する私の側のばかげた間違いでした。とにかく、この問題に遭遇した他の人のための私の最終的な実装は次のとおりです。

function encrypt($decrypted)
{
    $thePassKey = "12345678901234567890123456789012";

    # Add PKCS7 padding.
    $str = $decrypted;
    $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    if (($pad = $block - (strlen($str) % $block)) < $block) 
    {
        $str .= str_repeat(chr($pad), $pad);
    }

    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $iv = ''; for($i=0;$i<$iv_size;$i++){ $iv .= "\0";}
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $thePassKey, $str, MCRYPT_MODE_CBC, $iv));
}

function decrypt($encrypted)
{
    $thePassKey = "12345678901234567890123456789012";

    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $iv = ''; for($i=0;$i<$iv_size;$i++){ $iv .= "\0";}
    $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $thePassKey, base64_decode($encrypted), MCRYPT_MODE_CBC, $iv);

    # Strip PKCS7 padding.
    $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $pad = ord($str[($len = strlen($str)) - 1]);
    if ($pad && $pad < $block && preg_match(
        '/' . chr($pad) . '{' . $pad . '}$/', $str))
    {
        return substr($str, 0, strlen($str) - $pad);
    }

    return $str;
}
于 2012-09-07T08:56:32.510 に答える
0

FBEncryptor Githubページから(私の強調):

サポートされている暗号化アルゴリズムはAES256ビットのみです。

しかし、上記のコードスニペットでは、次のことを行っています。

mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_CBC, $iv);

つまり、暗号としてAES128ビットを使用して復号化します。

それに応じてコードを修正する必要があります。その他のよくある間違いには、不一致のパディングとブロック暗号操作モードの使用が含まれます。

于 2012-09-06T13:07:09.040 に答える