/ /シフトされた文字の組み合わせを生成するために必要なアルゴリズム - アルゴリズム、組み合わせ

シフトされた文字の組み合わせを生成するアルゴリズム - アルゴリズム、コンビナトリアル

私は自分の正確な順序と長さを知っていますTrueCryptパーティションのパスワードですが、Shiftキーでどの文字がアップシフトされたのか思い出せません。私は単にファイルからすべてのパスワードを試すPerlスクリプト(CrackTCのような)を書きましたが、パスワードファイルを素早く生成するためのアルゴリズムを探しています。パスワードは42文字なので、どんなアドバイスでも役に立ちます。

私は数字と句読点をシフトしただけなので、変更する必要があるのは17文字だけです。

これは宿題ではありません。

回答:

回答№1は2

クイックpythonスクリプト:

def isShiftable(c):
return not c in "123456789"

def generate(str, i=0):
if len(str) <= i:
print "".join(str)
else:
if isShiftable(str[i]):
str[i]=str[i].upper()
generate(str, i+1)
str[i]=str[i].lower()
generate(str, i+1)
else:
generate(str, i+1)

generate(list("testit123"))

私はそれがきれいにされることができると確信していて、そしてそれほど悪くされない、しかしそれは十分であるべきです。

17のシフト可能な文字の場合、131072の可能性があります。また、句読点をシフトするための独自の "upper" / "lower"関数を定義する必要があります。


回答№2のための5

各文字はそれより上でも下でもよいので1ビットに相当します。あなたは42ビットを持っています。バイナリでカウントし、バイナリビットのパターンに従って、文字を大文字または小文字に設定します。 2の42乗はとても大きい数です!力ずくで見つけるには大きすぎる!がんばろう!


回答№3の4

すべての組み合わせを試す必要があるとします。また、各パスワード試行は1文字で区切られているため、42文字のパスワードを大文字にした場合のパスワードファイルの長さは189テラバイトになります。あなたはおそらくファイルから直接作業したくないでしょう。

私が選ぶだろうアルゴリズムはバイナリカウントですアルゴリズムですが、単一のビットを切り替える代わりに、単一の文字の大文字と小文字を切り替えます。私はあなたが覚えている経験則でプールを絞り込むことを強くお勧めします(例:間違いなく5つ以上の大文字と40未満の大文字があった)。


回答№4の場合は1

実際には答えではありませんが、検索スペースを減らす可能性があります。

  • 大文字の最小値と最大値(4と10でも構いません)
  • 大文字の最小数と最大数(1と1でも構いません)
  • 小文字の最小数と最大数(2と15でも構いません)
  • いくつかの組み合わせは他のものよりもありそうなので、最初にチェックされるべきです。たとえば、大文字の最大の順序でグループの組み合わせを選択し、最初にそのような最小値でそれらをチェックします。

回答№5の場合は1

42文字のパスワード、そしてあなたは文字を知っている、そして2 ^ 41がある(つまり: 2 199 023 255 552)ユニークな組み合わせ。あなたが1秒でそれらの10mをチェックすることができれば、あなたはそれをブルートフォースすることができます - そしてそれは少なくともかかるでしょう:61時間5分2秒。

あなたはたぶんそれほど多くの仕事をする必要はないでしょう。 xを大文字の数とします。

  • もしあなたが 7 > x 大文字:(42!)/(6!36!)+(42!)/(5!37!)+(42!)/(4!38!)+(42!)/(3!39!) +(42!)/(2!40!)+(42!)/(1!41!)= 6 220 767 組み合わせ。
  • もしあなたが 6 < x < 9 大文字:(42!)/(8!34!)+(42!)/(7!35!)= 145 008 513 組み合わせ。

あなたがチェックプロセスとチェックを自動化することができるなら 2000 1秒後に要素 最悪の場合

  • もしあなたが 7 > x 大文字、それはかかるでしょう:51.84分
  • もしあなたが 6 < x < 9 大文字、それはかかります:20.14時間

ほとんどの場合、特別な場合が必要ですユニークな要素を効率的に見つけるための置換アルゴリズム。これは非常に複雑な問題ですが、2 ^ 41個以上の要素を繰り返すのは簡単なことではありません。