0

アプリストアにあるアプリがあり、これを使用してパスをハッシュします。

    //salt the password
NSString* saltedPassword = [NSString stringWithFormat:@"%@%@", fldPassword.text, kSalt];

//prepare the hashed storage
NSString* hashedPassword = nil;
unsigned char hashedPasswordData[CC_SHA1_DIGEST_LENGTH];
//hash the pass
NSData *data = [saltedPassword dataUsingEncoding: NSUTF8StringEncoding];
if (CC_SHA1([data bytes], [data length], hashedPasswordData)) {
    hashedPassword = [[NSString alloc] initWithBytes:hashedPasswordData length:sizeof(hashedPasswordData) encoding:NSASCIIStringEncoding];

データベースのパスワードは Vîÿ¿ Ø2(&Zw6

私の問題は、同じことを行うphp関数が見つからないため、ユーザーはpassをリセットできることです。

Xcodeで次のようにできます:

 NSString *hashkey = <your data here>;
 // PHP uses ASCII encoding, not UTF
 const char *s = [hashkey cStringUsingEncoding:NSASCIIStringEncoding];
 NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];

 // This is the destination
uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0};
// This one function does an unkeyed SHA1 hash of your hash data
CC_SHA1(keyData.bytes, keyData.length, digest);

// Now convert to NSData structure to make it usable again
NSData *out = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
// description converts to hex but puts <> around it and spaces every 4 bytes
NSString *hash = [out description];
hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
// hash is now a string with just the 40char hash value in it

これにより、php の sha1() 関数への = というコードが得られますが、それを行うと、現在のすべてのユーザーのパスをリセットして、それをメールで送信する必要があります :-/

4

0 に答える 0