iPhone/PHPでAES暗号を使う

暗号関連は既に色々なページにも載ってますがメモとして残しておきます。
簡易版の為ECBモードになっていますがWEB上で公開するアプリを作る場合は必ずCBCやCTR
で行うようにしてください。

クライアント側がiPhoneでサーバー側がPHP
準備
暗号サンプル CryptoExercise
base64

iPhone クライアント側
    char * key = "0123456789ABCDEF"; // 16文字
    NSData * symmetricKey = [NSData dataWithBytes:key length:16];
    NSString* text = @"AES暗号化テスト";
    CCOptions padding = kCCOptionPKCS7Padding|kCCOptionECBMode;
 
    NSData* data = [[SecKeyWrapper sharedWrapper] doCipher:
                    [text dataUsingEncoding:NSShiftJISStringEncoding] // エンコード文字列は適当に変更してください。
                                        key:symmetricKey 
                                    context:kCCEncrypt
                                    padding:&padding];
    [Base64 initialize];
    NSString* base64String = [Base64 encode:data];

PHP サーバー側
function pkcs7_unpad($data) 
{
 $pad = ord($data{strlen($data)-1});

 if ($pad > strlen($data))
 {
  return false;
 }

 if (strspn($data, chr($pad), strlen($data) - $pad) != $pad)
 {
  return false;
 }

 $text = $_GET['arg0'];

 $srcdata = substr($data, 0, -1 * $pad);
 return $srcdata;
}


$key = "0123456789ABCDEF"; // 鍵
$size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($size, MCRYPT_RAND); // ECBでは初期ベクトルは使用しませんがWarningがでるから呼ぶ
$binData = base64_decode($text);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $binData, MCRYPT_MODE_ECB, $iv );
$decrypted = pkcs7_unpad( $decrypted );


参考サイト
強火ですすめ

コメント

このブログの人気の投稿

.NET:FileSystemWatcherで複数フィルタ指定

AI画像生成の力をかりる

君たちはどう生きるか