我想要生成一个独特的数字串-长6-8位,基于另一个字符串。
我有一个包含电子邮件地址的字符串。然后,当我点击一个按钮,我得到另一个字符串包含一个独特的6-8位数字,基于该电子邮件地址。
发布于 2013-12-16 15:54:18
其他人建议使用加密安全的MD5哈希。
如果您不关心密码安全性,也可以只使用内置的散列函数:
NSUInteger *emailHash = [emailAddressString hash];
由于您正在转换成一个数字是一个电子邮件地址,似乎加密是过火。
发布于 2013-12-16 14:54:04
您可以创建一个MD5哈希。
H2CO3为此发布了一个类别:NSString-MD5
你将不得不#import "NSString-MD5"
。
然后您可以创建一个散列:
NSString *emailHash = [email MD5Hash];
执照是公有的。
正如罗曼底所指出的:没有任何保证你将得到绝对唯一的值,这适用于任何固定结果大小的散列方法(即,对于无限数量的输入变体,结果的数量有限)。
发布于 2013-12-16 16:02:25
在字符串上创建一个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;
}
https://stackoverflow.com/questions/20613686
复制相似问题