2013-12-16 2 views
0

Я ищу для создания уникальной строки чисел - предпочтительно длиной 6-8 цифр, основанной на другой строке.Создайте уникальную цифровую строку, основанную на другой строке iOS

например. У меня есть строка, содержащая адрес электронной почты. Затем при нажатии кнопки я получаю другую строку, содержащую уникальный номер из 6-8 цифр, основанный на этом адресе электронной почты.

Я новичок, поэтому любая подробная помощь будет оценена очень! :)

Спасибо,

+2

сделать шифрование MD5 или SHA 256. Он будет немного длинным, но будет уникальным. –

+1

@PranjalBikashDas Такие хеши не гарантируются как уникальные. – rmaddy

+1

Для чего это используется? Если вы предоставите подробную информацию, мы сможем предоставить лучший (прочитанный стандарт) метод. @rmaddy, если вы можете столкнуться с SHA 2, вы станете первыми. –

ответ

4

Другие предложили использовать криптографически защищенный хеш MD5.

Если вы не заботитесь о криптографической защиты, вы можете также просто использовать встроенный в хэш-функции:

NSUInteger *emailHash = [emailAddressString hash]; 

Так что вы преобразованный в число является адрес электронной почты, который, похоже, шифрование является излишним.

+0

+1 для облегчения жизни для ОП. Что касается ваших опасений по поводу криптографии: этот хэш является как _cryptographic_ как MD5. Не больше, не меньше. Хэш не может быть расшифрован обратно к исходной строке. Вы могли бы сгенерировать набор строк, которые генерируют тот же самый хеш. –

1

Вы можете создать хэш MD5.

H2CO3 опубликовал категорию этого: NSString-MD5

Вы должны #import "NSString-MD5".

Затем вы можете создать хэш:

NSString *emailHash = [email MD5Hash]; 

Лицензия, хорошо, общественное достояние.

Как отметил rmaddy: нет никаких гарантий того, что вы получите абсолютно уникальное значение для любого метода хеширования с фиксированным размером результата (т. Е. Ограниченное количество результатов для неограниченного количества вариантов ввода).

+1

В то время как вероятность столкновения крошечная, хеш MD5 не гарантированно будет уникальным. – rmaddy

+0

Это абсолютно верно. Но это то же самое для любого другого метода хэширования. –

+0

Не включая библиотеку шифрования означает, что вам нужно было установить флажок «эта программа включает в себя шифрование» и потенциально ограничить неамериканское распространение полученного приложения? –

1

Создайте хеш-метку md5 на строке. CC_MD5 возвращает 16 байтов. Если вы хотите взять 8 байтов, вы можете отбросить другие байты, но вам нужно проверить уникальность (сравните с вашими ранее полученными или сохраненными значениями).

#import <CommonCrypto/CommonDigest.h> 
#import <CommonCrypto/CommonHMAC.h> 
#import <CommonCrypto/CommonCryptor.h> 


+ (NSString *)md5String:(NSString *)plainText 
{ 
    if(plainText == nil || [plainText length] == 0) 
     return nil; 

    const char *value = [plainText UTF8String]; 
    unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH]; 
    CC_MD5(value, strlen(value), outputBuffer); 

    NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; 
    for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){ 
     [outputString appendFormat:@"%02x",outputBuffer[count]]; 
    } 
    NSString * retString = [NSString stringWithString:outputString]; 
    [outputString release]; 
    return retString; 
} 
Смежные вопросы