【发布时间】:2013-05-17 15:17:08
【问题描述】:
嘿,所以我想如果我制作一个生成随机密码的小应用程序,然后让应用程序运行所有可能性并尝试查看密码是什么,告诉我它尝试了多少次,那会很酷。有时应用程序工作有时它崩溃取决于密码是什么。我想知道我可以做些什么来阻止它通过使用最多的内存而崩溃。这就是方法。
-(void)hackString
{
NSString *string;
NSString *string1;
NSString *string2;
NSString *string3;
NSString *string4;
NSString *string5;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(void){
NSString *hackedString;
for (string in self.validLetters) {
//[hackedString appendString:string];
for (string1 in self.validLetters) {
//[hackedString appendString:string1];
for (string2 in self.validLetters) {
//[hackedString appendString:string1];
for (string3 in self.validLetters) {
//[hackedString appendString:string1];
for (string4 in self.validLetters) {
for (string5 in self.validLetters) {
hackedString = [NSString stringWithFormat:@"%@%@%@%@%@%@",string,string1,string2,string3,string4,string5];
// NSLog(@"%@",hackedString);
[self testStringWithPassword:hackedString];
}
}
}
}
}
}
});
}
我应该在那里做些什么来阻止它崩溃?
【问题讨论】:
-
你正在运行一个 O(n^6) 的循环!
-
对于我的一生,我无法理解你到底想用那个疯狂的 6 深循环来完成什么。用有效字母构建每个可能的字符串?
-
@John Yup——据我所知,它是一个 6 个字符的密码破解程序。有趣的学习技巧;这个兔子洞很深。
-
有趣的事实:如果
validLetters包含大写和小写的拉丁字母加上从 0 到 9 的数字,即 A-Z、a-z 和 0-9,您将生成 570 亿种不同的组合。每个字符串长 12 个字节(NSString在内部使用 UTF-16)+ 一些未知的开销,因此您可能在谈论超过 700 GB 的存储空间。我推荐一些自动释放池。
标签: objective-c memory