3

このコードを使用して、文字列を提供することから、進化するIOSアプリにハッシュを作成しています。

-(NSString*) sha1:(NSString*)input
{
 const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
 NSData *data = [NSData dataWithBytes:cstr length:input.length];

 uint8_t digest[CC_SHA1_DIGEST_LENGTH];

 CC_SHA1(data.bytes, data.length, digest);

 NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

 for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
 [output appendFormat:@"%02x", digest[i]];

 return output;

}

私のPHPコードは

 sha1(json_encode($array));

アラビア語を含む文字列があります。

英語の文字列からハッシュを作成し、それを Ubuntu*ストロング テキストの下でPHPコードから作成されたハッシュと比較すると、結果は同じになります。

しかし、アラビア文字でハッシュを作成すると、php コードから作成されたハッシュと比較しても結果は一致しません。

このコードの人間の問題は何ですか。

ありがとう

4

2 に答える 2

1

PHP json_encode($array)関数に起因する問題が見つかりました。

だから私はhttp://php.net/manual/en/function.json-encode.phpでこの関数を見つけました .jsonはUTF-8文字でエンコードされています

function my_json_encode($arr)
{
    //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding
   array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); });
   return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');

 }

元:

sha1(my_json_encode($newArray)

于 2013-09-24T13:45:56.843 に答える