2

ちょっと、ランダムなパスワードを生成する小さなアプリを作成し、そのアプリですべての可能性を実行して、パスワードが何回試行されたかを確認してみたら、クールだと思いました。パスワードによっては、アプリが動作することもあればクラッシュすることもあります。大量のメモリを使用してクラッシュするのを防ぐためにできることは何か知りたかったのです。これが方法です。

-(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];

                        }

                    }
                }
            }
        }
    }
         });

} 

クラッシュを防ぐために何かすべきことはありますか?

4

3 に答える 3

4

アプリでメモリが不足している場合、最も可能性が高いのは、大量のオブジェクトで自動解放プールがいっぱいになり、メモリが使い果たされているためです。

@autoreleasepool{}単純に、内側のfor()ループの 1 つを使用できます。

ただし、ほとんどのパスワード入力システムは、すぐにパスワードを逆ハッシュ不可能な文字列にハッシュし、保存されているハッシュと比較します。したがって、あなたのアプローチがパスワードのテストに役立つ可能性は低いです。おそらく同じハッシュを実装する必要があります。

以前は、会社のユーザーのパスワード データベースでパスワード クラッカー ( John the Ripper のようなもの) を実行し、パスワードが脆弱な人に自動メールを送信していました。クラッカーが数分以内に破ることのできないパスワードを考えることができなかったという理由で、最終的に 1 人をクビにすることになりました (本質的に同様の理由が他にもありました)。

于 2013-05-17T15:45:31.853 に答える