iPhone/PHPでAES暗号を使う
暗号関連は既に色々なページにも載ってますがメモとして残しておきます。
簡易版の為ECBモードになっていますがWEB上で公開するアプリを作る場合は必ずCBCやCTR
で行うようにしてください。
クライアント側がiPhoneでサーバー側がPHP
準備
暗号サンプル CryptoExercise
base64
iPhone クライアント側
PHP サーバー側
参考サイト
強火ですすめ
簡易版の為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 );
参考サイト
強火ですすめ
コメント
コメントを投稿