2013-03-14 3 views
0

저는 RNCryptor를 사용하여 iOS에서 메시지를 암호화 한 다음 PHP에서 해독합니다. 그러나 특수 문자는 해독 된 문자열에서 사라집니다.iOS/PHP 및 RNCryptor 특수 문자

나는 아이폰 OS에 암호화 방법

-(NSData *)encryptThis:(NSString *)str 

{

NSString *key = @"mysuper32bitkey"; 
NSError *error = nil; 
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; 
NSData *encryptedData = [RNEncryptor encryptData:data 
            withSettings:kRNCryptorAES256Settings 
             password:key 
              error:&error]; 

return encryptedData; 

}

나는

$b64_data = $message; 
$password = "mysuper32bitkey" 
// back to binary 
$bin_data = $message;// message already in binary. No need for -> mb_convert_encoding($b64_data, "UTF-8", "BASE64"); 
// extract salt 
$salt = substr($bin_data, 2, 8); 
// extract HMAC salt 
$hmac_salt = substr($bin_data, 10, 8); 
// extract IV 
$iv = substr($bin_data, 18, 16); 
// extract data 
$data = substr($bin_data, 34, strlen($bin_data) - 34 - 32); 
// extract HMAC 
$hmac = substr($bin_data, strlen($bin_data) - 32); 

// make HMAC key 
$hmac_key = pbkdf2('SHA1', $password, $hmac_salt, 10000, 32, true); 
// make HMAC hash 
$hmac_hash = hash_hmac('sha256', $data , $hmac_key, true); 
// check if HMAC hash matches HMAC 
if($hmac_hash != $hmac) 
    echo "false"; 

// make data key 
$key = pbkdf2('SHA1', $password, $salt, 10000, 32, true); 
// decrypt 
$ret = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); 

echo trim(preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\xFF]/u', '', $ret)); 

것은이 PHP에서 암호를 해독하는 방법이 나는 "Agresión를 암호화하는 경우 "iOS에서는 PHP 만 반환 s "Agresin". "ó"를 해독하지 않는 이유는 무엇입니까? 난 dataUsingEncoding 생각 : NSUTF8StringEncoding 특수 문자를 유지할 것이다 ... 나는 다른 유형의 인코딩을 사용해야합니까?

답변

0

이 줄에 O (U + 00F3)를 제거하고 : 당신이 \ x80- \ XFF을 모두 제거하고

echo trim(preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\xFF]/u', '', $ret)); 

참고. 그러지 마.

+0

그래서 다음과 같아야합니다. echo trim (preg_replace ('/ [\ x00- \ x08 \ x0B \ x0C \ x0E- \ x1F/u', '', $ ret)); ? \ x80- \ xFF 제거하기 – GabCas

+0

왜 여기에 어떤 문자를 박탈합니까? –

+0

코멘트가없는 예입니다. 지금은 많은 유니 코드 문자를 제거하고 있다는 것을 알았습니다. – GabCas