1

周りを検索すると、同様の問題を参照しているリンクがいくつか見つかりますが、何も機能しておらず、私を怒らせています。

誰かがObjectiveCで次のPHPコードを書く方法についてのステップバイステップガイドを教えてもらえますか?

暗号化されたコンテンツを必要とするいくつかのWebサービス呼び出しを作成しており、PHP暗号化サンプルのみが提供されています。暗号化を解除したくないことを明確にするために、この暗号化プロセスをIOSにミラーリングする必要があります。

どうもありがとう

function encrypt($plainText) {

      $initVector = "mysite.com";      
      $key = base64_decode("GfSDfXS14U8I3YglEFrMjMOOnESUMxN3wRTt1TeDosY=");

      $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
      $padding = $block - (strlen($plainText) % $block);
      $plainText .= str_repeat(chr($padding), $padding);
      $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plainText, MCRYPT_MODE_CBC, $initVector);
      $crypttext64 = base64_encode($crypttext);

      return $crypttext64;
}
4

2 に答える 2

0

これは、PHPでAESを使用して正しく実行されたCBCモードの暗号化に非常にplainText近づきました:)静的で短すぎるIVと、文字エンコードが指定されていないという事実(の場合は文字列ではなく文字列)については本当に残念ですバイト)。

それ以外の場合、これはCBCモードとPKCS#7パディングを使用するAES-256に非常によく似ているため、Objective-Cで任意の例を使用して正確に実行できます。もちろん、base64デコーダーも必要です。

ただし、ランダムIVを生成し、暗号文のプレフィックスを付ける必要があります(PHPではトリッキーなセキュアランダム)。IVは、16バイトのAESの場合、基礎となる暗号のブロックサイズと同じサイズである必要があります。次に、復号化機能はそれらのバイトを暗号文から削除し、IVとして使用する必要があります。

整合性保護(メッセージ認証コードまたはMAC)を検討することも非常に良い考えです。

于 2013-02-26T21:24:12.230 に答える
0

ここアップル開発フォーラムで回答されました。

https://devforums.apple.com/message/791166#791166

PHPは奇抜な暗号IMOを使用しますが、コードは奇抜さを回避するのが最善のようです(たとえば、AFAICTのパディングコードはPKCS#7パディングを実装します)。発生している問題は、PHPが文字列「mysite.com」を有効なAES-128 IV(長さは必ずブロックサイズ、つまり16バイトと一致する必要があります)に変換する方法に関連している可能性があります。PHPがゼロでパッドする可能性は十分にありますが(これはPHPの方法のようです)、PHP側で調査する必要があります。

それを超えて、これはCommonCryptoのかなり一般的なアプリケーションのように見えます。必要がある:

okCCOptionPKCS7Paddingフラグを渡します

o kCCOptionECBModeフラグを渡さない(CBCを取得する)

o kCCAlgorithmAES128、kCCKeySizeAES128、およびkCCBlockSizeAES128を使用します

o独自のBase64を実行します[1]

最後の点については、最後に行うことをお勧めします。PHPコードを変更して、$ key、$ plainText、および$ crypttextを16進ダンプとして出力し、iOS側で操作します。それが機能したら、Base64を追加します。これにより、問題が半分に分割されます。つまり、Base64の問題が暗号化の問題と混同されることはありません。

最後に、OSXのコマンドラインには便利なBase64エンコーダーとデコーダーがあることに注意してください。たとえば、サンプルの暗号化キーの16進ダンプを取得するには、次のようにします。

$ openssl enc -d -base64 | hexdump -C GfSDfXS14U8I3YglEFrMjMOOnESUMxN3wRTt1TeDosY = ^ D 00000000 19 f4 83 7d 74 b5 e1 4f 08 dd 88 25 10 5a cc 8c | ...} t..O ...%。Z .. | 00000010 c3 8e 9c 44 94 33 13 77 c1 14 ed d5 37 83 a2 c6 | ... D.3.w .... 7 ... | 00000020

共有してお楽しみください

eskimo1に感謝します

于 2013-03-05T18:23:20.057 に答える