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 );
参考サイト
強火ですすめ
コメント
コメントを投稿