如何在Cocoa应用程序中存储敏感数据(例如密码,API密钥)?

Pio*_*zia 5 cocoa cryptography objective-c

我需要在我的代码中提供一些密码,API密钥和类似的敏感数据.这方面的最佳做法是什么?硬编码?SQlite的?一些加密框架?

Dou*_*son 5

与其他人一样,您不能同时保护API密钥并在您的应用中使用它.但是,您可以相对容易地进行简单的混淆,如果对饼干的收益很低,那么您可能不会被烧毁.

一种简单的技术是将API密钥分成几个子字符串.确保以随机顺序将它们放入代码中.例如,如果您的API密钥是12345678901234567890,您可以将其分解为5个子字符串,如下所示:

static char *part1 = "12345";  
static char *part5 = "7890";    
static char *part3 = "890123";  
static char *part2 = "67";  
static char *part4 = "456";
Run Code Online (Sandbox Code Playgroud)

如果运行/usr/bin/strings生成的二进制文件,则不应按顺序查看API密钥.相反,您将按照C文件中列出的顺序查看API子字符串.像这样的5个子串,即5*4*3*2*1 = 120个排列.如果你把它分成13个子串,你会看到超过60亿个排列.

但是,如果他们想要获取API密钥,那么这不会阻止知道他们正在做什么的人.最终,您必须将字符串组合在一起并将其传递给您的某个方法,此时,破解者可以使用调试器来设置断点并检查内存.