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 특수 문자를 유지할 것이다 ... 나는 다른 유형의 인코딩을 사용해야합니까?
그래서 다음과 같아야합니다. echo trim (preg_replace ('/ [\ x00- \ x08 \ x0B \ x0C \ x0E- \ x1F/u', '', $ ret)); ? \ x80- \ xFF 제거하기 – GabCas
왜 여기에 어떤 문자를 박탈합니까? –
코멘트가없는 예입니다. 지금은 많은 유니 코드 문자를 제거하고 있다는 것을 알았습니다. – GabCas