2

ハッシュは、ファイルの内部データを読み取る方法を使用し、そこから数学的に数字と文字を作成します。C ++の数式はどのようにこれを行いますか?

C++ と Visual Studio を使用して、データ ファイルを読み取り、そこから SHA-256 ハッシュ サムを取得するアプリケーションを作成しようとしています。次に、式を適用してそれを別の数字と文字に変更しますが、文字数は少なくなります。この処理された数字と文字は、7zip または rar ファイルのパスワードとして使用されます。(どちらが暗号化に適しているかはわかりません)

これは、コンテンツにアクセスするインターネット クローラーと、アクセスしてはならない人物を軽減するためのものです。人を完全に締め出せるとは思っていません。

また、トランスコード可能である必要があります。したがって、できればハッシュからパスに、パスからハッシュに移動できる必要があります。

誰かがこれについて私を助けることができれば、私はとても感謝しています.3.

他にご不明な点や情報がございましたら、お気軽にメッセージをお送りください。

GUI の写真:

4

2 に答える 2

1

ハッシュをまったく探していません。エンコードからオリジナルへの可逆性が必要な場合は、暗号化が必要です。何かを暗号化するための当然の方法がありますが、非常に簡単な方法は、Everpassword の AESCrypto.org の RC4などを使用し、他のパスワードをキーとして使用することです。(本当に気にしないのであれば、空白のキーを使用することもできますが、それでもランダムに見えるものにエンコードされます。)主な違いは、AES は一般にパディングを必要とするため(CTR モードを無視する)、結果が長くなることです。 、しかし RC4 のサイズは、入力が何であれ正確です。上記のリンクでは、Bo は base64 変換によって展開されています。

ただし、元のパスワードを取得できるようにしたい理由がよくわかりません。誰かにパスワードを与えて、それを生成した元のフレーズを彼らの好奇心を満たすために発見させることができるユースケースは 1 つもありません。ハッシュからいくつかの文字を使用することもできます。

また、ハッシュと暗号は数字と文字を与えません。それらは 1 と 0 を与えます。数字と文字は、生のバイナリを簡単に処理できないため、それらを比較または入力するときにそれらを視覚化する便利な方法です。ただし、多くの可能な表現があります。

于 2012-10-29T14:21:51.397 に答える
1

必要なものはかなり単純なようです。(この問題に対する洗練された数学的解決策を見つけるのは楽しいかもしれませんが、実際には必要ではありません) SHA-256 は 32 バイト長の配列です。表示される文字と数字は、配列の 16 進数表現です。16 進数は 4 ビットのデータを必要とするため、2 つの文字または数字 (または文字と数字) の各組み合わせが 1 バイトを表します。これが、32 バイト配列を表すために 64 文字の長い文字列が必要な理由です。

私の知る限り、WinRar には 177 文字のパスワード制限があり、7z には制限がありません。理論的には、元の 64 文字の SHA-256 表現をパスワードとして使用できます。生成されたパスワードは、16^64 == 2^256 の組み合わせがあるため、非常に強力です。

ただし、たまたま、Base64 エンコーディングを使用すると、より短いパスワードでより強力なパスワードを生成できます (Wikipedia から始めることをお勧めします)。Base64 を使用すると、32 バイトの配列を、大文字と小文字、9 桁の数字、+ および / 文字で構成される 43 文字の長さのパスワードとして表すことができます。したがって、64^43 > 2^256 になります。

Base64 文字列を簡単にハッシュに戻すことができます。

補足として、 AES256 は 256 ビット キーを使用するため、より強力なパスワードを生成しても実際にはまったく役に立たないことに注意してください。その場合、攻撃者はキーを攻撃してパスワードを無視できるため、SHA-256 を使用するだけで十分です。しかし、64 文字の長さのパスワードよりも強力な 43 文字の長さのパスワードを生成できるという事実が気に入っています。

さらに別の注意事項: 使用するコンプレッサーがパスワード文字として受け入れる文字の種類に応じて、独自の Base128 エンコーディングを設計し、文字数を 37 に減らすことができます。

また、7z を使用することをお勧めします。7z は高速で、非常に機能的で、オープン ソースであるためです。

于 2012-10-30T19:14:32.170 に答える