Ios 根据另一个字符串生成唯一的数字字符串

Ios 根据另一个字符串生成唯一的数字字符串,ios,objective-c,string,security,random,Ios,Objective C,String,Security,Random,我希望根据另一个字符串生成一个唯一的数字字符串,长度最好为6-8位 e、 g.我有一个包含电子邮件地址的字符串。然后,当单击一个按钮时,我会得到另一个字符串,其中包含一个基于该电子邮件地址的唯一6-8位数字。您可以创建一个MD5哈希 为此发布了一个类别: 您必须导入“NSString-MD5” 然后您可以创建一个哈希: NSString *emailHash = [email MD5Hash]; 许可证是公共领域 正如rmaddy指出的那样:不能保证您将获得绝对唯一的值,这适用于任何具有固定结

我希望根据另一个字符串生成一个唯一的数字字符串,长度最好为6-8位


e、 g.我有一个包含电子邮件地址的字符串。然后,当单击一个按钮时,我会得到另一个字符串,其中包含一个基于该电子邮件地址的唯一6-8位数字。

您可以创建一个MD5哈希

为此发布了一个类别:

您必须导入“NSString-MD5”

然后您可以创建一个哈希:

NSString *emailHash = [email MD5Hash];
许可证是公共领域


正如rmaddy指出的那样:不能保证您将获得绝对唯一的值,这适用于任何具有固定结果大小的散列方法(即:有限数量的结果用于无限数量的输入变量)。

您可以创建MD5散列

为此发布了一个类别:

您必须导入“NSString-MD5”

然后您可以创建一个哈希:

NSString *emailHash = [email MD5Hash];
许可证是公共领域


正如rmaddy指出的那样:不能保证您将获得绝对唯一的值,这适用于任何具有固定结果大小的散列方法(即:有限数量的结果用于无限数量的输入变量)。

其他人建议使用加密安全的MD5散列

如果您不关心加密安全性,也可以简单地使用内置哈希函数:

NSUInteger *emailHash = [emailAddressString hash];

因为你转换成的数字是一个电子邮件地址,所以加密似乎有些过分。

其他人建议使用加密安全的MD5哈希

如果您不关心加密安全性,也可以简单地使用内置哈希函数:

NSUInteger *emailHash = [emailAddressString hash];

由于您要转换为数字的是电子邮件地址,因此加密似乎有些过分。

在字符串上创建md5哈希。CC_MD5返回16个字节。如果要获取8个字节,可以放弃其他字节,但需要检查唯一性(与先前接收或存储的值进行比较)

#导入
#进口
#进口
+(NSString*)md5String:(NSString*)纯文本
{
if(明文==nil | |[明文长度]==0)
返回零;
常量字符*值=[纯文本UTF8String];
无符号字符输出缓冲区[CC_MD5_DIGEST_LENGTH];
CC_MD5(值、strlen(值)、outputBuffer);
NSMutableString*outputString=[[NSMutableString alloc]initWithCapacity:CC_MD5_DIGEST_LENGTH*2];
对于(NSInteger count=0;count
在字符串上创建md5哈希。CC_MD5返回16个字节。如果要获取8个字节,可以放弃其他字节,但需要检查唯一性(与先前接收或存储的值进行比较)

#导入
#进口
#进口
+(NSString*)md5String:(NSString*)纯文本
{
if(明文==nil | |[明文长度]==0)
返回零;
常量字符*值=[纯文本UTF8String];
无符号字符输出缓冲区[CC_MD5_DIGEST_LENGTH];
CC_MD5(值、strlen(值)、outputBuffer);
NSMutableString*outputString=[[NSMutableString alloc]initWithCapacity:CC_MD5_DIGEST_LENGTH*2];
对于(NSInteger count=0;count
执行MD5加密或SHA 256。它将有点长,但将是唯一的。@PranjalBikashDas这样的散列不能保证是唯一的。这是用来做什么的?如果您提供详细信息,我们可能会提供更好的(阅读标准)方法@rmaddy,如果您能找到与SHA 2的冲突,您将是第一个。@SHA 2的rmaddy冲突为“无”,因此它恰好是唯一的。你可以通过链接参考做MD5加密或SHA 256。它将有点长,但将是唯一的。@PranjalBikashDas这样的散列不能保证是唯一的。这是用来做什么的?如果您提供详细信息,我们可能会提供更好的(阅读标准)方法@rmaddy,如果您能找到与SHA 2的冲突,您将是第一个。@SHA 2的rmaddy冲突为“无”,因此它恰好是唯一的。当发生冲突的几率很小时,您可以通过链接进行参考,MD5哈希值不能保证是唯一的。这是绝对正确的。但对于任何其他散列方法都是一样的。包含加密库不意味着您必须选中“此程序是否包含加密”复选框,并且可能会限制结果应用程序的非美国分发?在这种情况下,每个发送MD5哈希密码而不是原始密码的应用程序都必须勾选此复选框。以及所有使用SSL连接的应用程序。例如,每一个使用Stripe的应用程序。虽然发生冲突的几率很小,但MD5哈希值并不能保证是唯一的。这是绝对正确的。但对于任何其他散列方法都是一样的。包含加密库不意味着您必须选中“此程序是否包含加密”复选框,并且可能会限制结果应用程序的非美国分发?在这种情况下,每个发送MD5哈希密码而不是原始密码的应用程序都必须勾选此复选框。以及所有使用SSL连接的应用程序。每一个使用Stripe的应用程序,例如,+1让OP的生活更轻松。至于你对加密的担忧:这个散列和MD5一样加密。不多不少。无法将哈希解密回原始字符串。不过,您可以生成一组字符串来生成相同的哈希值。+1可以简化OP的操作。至于您对加密的担忧:此哈希值与MD5一样加密。不多不少。无法将哈希解密回原始字符串。不过,您可以生成一组字符串