Ios 如何从Cocoa中的URL获取唯一的哈希或id?

Ios 如何从Cocoa中的URL获取唯一的哈希或id?,ios,cocoa-touch,Ios,Cocoa Touch,在我的应用程序中,我阅读RSS提要并将它们保存到一个核心数据数据库中,使用每个特定文章的URL作为键。在系统中传递这些URL可能会有问题,因为它们可能会很长,我希望有一种方法可以生成一个唯一的标识符来存储在db中,然后传递给大家 我还希望它可以使用相同的字符串进行重建,这样如果我得到一个重复的URL,我就可以从中生成标识符,并简单地检查核心数据中的标识符 有一种简单的方法可以做到这一点吗?使用SHA1(),它将满足您的所有要求(使用相同的输入重新运行它会生成相同的输出,更改输入中的单个字符会显著

在我的应用程序中,我阅读RSS提要并将它们保存到一个核心数据数据库中,使用每个特定文章的URL作为键。在系统中传递这些URL可能会有问题,因为它们可能会很长,我希望有一种方法可以生成一个唯一的标识符来存储在db中,然后传递给大家

我还希望它可以使用相同的字符串进行重建,这样如果我得到一个重复的URL,我就可以从中生成标识符,并简单地检查核心数据中的标识符


有一种简单的方法可以做到这一点吗?

使用SHA1(),它将满足您的所有要求(使用相同的输入重新运行它会生成相同的输出,更改输入中的单个字符会显著更改输出)。

当大多数人谈论哈希时,他们通常会考虑单向哈希,如SHA1、SHA2或MD5。虽然这些方法非常有用,但它们不允许您获取散列并将其反转为原始形式。然而,它们将允许您做一些事情,比如将用户输入的密码与他们以前输入的密码进行比较,而不必存储实际的密码——仅存储散列

您似乎想要的是字符串压缩或压缩。幸运的是,gzip使用
ASIHTTPRequest
类得到了开箱即用的支持。这里有一些使用gzip的代码

这里有一篇非常好的文章讨论了使用MD5进行哈希:

使用CommonCrypto库,已经内置了许多哈希算法。您可以像这样使用MD5 hasing算法:

#import <CommonCrypto/CommonDigest.h>

char input[] = "Some data value.";
char result[16];
CC_MD5(input, strlen(input), result);

如果您想了解更多关于仅向前散列的信息,我在中发布了一些信息以及产品代码

使用像MD5 SHA1或SHA256这样的安全散列器会导致源代码每次算法过时或每周都必须更改散列器函数。然后,使用自动审计工具的公司将拒绝使用这些功能的源代码

因此,如果您需要一个哈希函数来从URL中删除特殊字符,那么最好使用一个自定义哈希函数,而不是一个安全哈希函数

#import <CommonCrypto/CommonDigest.h>

char input[] = "Some data value.";
char result[16];
CC_MD5(input, strlen(input), result);
printf("MD5 (\"%s\") = %02x%02x%02x%02x%02x%02x
                       %02x%02x%02x%02x%02x%02x
                       %02x%02x%02x%02x\n",
    input,
    result[0], result[1], result[2], result[3], 
    result[4], result[5], result[6], result[7],
    result[8], result[9], result[10], result[11],
    result[12], result[13], result[14], result[15]);