JavaでSHA-1アルゴリズムで暗号化された文字列を復号化することはできますか?sha1で暗号化された文字列をJavaで復号化する方法
答えて
SHA1はcryptographic hash functionであり、元に戻すことはできません。ハッシュを逆転させることができた場合(与えられたハッシュの入力を見つける)、それは役に立たないでしょう。何かを暗号化して解読する必要がある場合は、encryption function(AESまたはRSAなど)を使用する必要があります。
しかし、非常に単純な入力の場合は、入力が何であるかを推測し、ハッシュが同じかどうかを確認することで可能です。crack the hash function
例Pythonのコードは:あなたが実際にJohn the RipperまたはHashcatのようなソフトウェアを使用して、効率的にハッシュをクラックしたい場合はもちろん
def crack_hash(hash_to_crack, hash_function, list_of_guesses):
# Try to hash everything in our guess list
for guess in list_of_guesses:
new_hash = hash_function(guess)
# if the hashes match, we found it
if new_hash == hash_to_crack:
return guess
# If none of them match, give up
return None
、おそらくあなたの最善の策です。これはパスワードが短くて簡単に推測できるため、通常は機能しますが、入力が増えるにつれて指数関数的に増加することに注意してください。 SHA-1のすべてのハッシュを6文字の入力で分けることができますが、16文字のクラッキングは平均して数兆年を要します。
この方法では、わかりやすい量のスペースと時間と、合理的なサイズのリストが必要です。もっと実用的な方法は、時間メモリのトレードオフを適用するために[rainbow table](http://en.wikipedia.org/wiki/Rainbow_table)を利用することです。 – jsvk
@jsvk - これは良いアイデアだと言っているわけではありませんが、このメソッドは塩漬けのハッシュには役に立たないです。実際、私は、あなたが推測するべきことが良いアイデアを持っていないかぎり、例が無意味であることを説明することを望んでいました。それは改善することができますが、現実的には誰も独自のパスワードクラッカーを使用しません - 確かにPythonで書かれたものはありません; –
SHA-1はハッシュなので、これはできません。一方的なチケットです。文字列を暗号化して解読するには、暗号化されたデータを生成するためにkeyを使用する暗号化アルゴリズムを使用する必要があります。その後、データを暗号化し、復号化を成功させることができます。例えばAES。あなたはAESについて読むことができますhere
短い答え:それは不可能です。
SHA-1はcryptographic hash functionであるため、ピジョンホールの原理によって、逆転することは数学的に不可能です。可能なSHA-1ハッシュは2つしかありません。です。可能な入力ストリングの数は無限であるため、衝突(同じ値にハッシュする複数の入力)が必要です。一般に、それらの文字列のどれが元の入力であったかを知る方法はありません。
しかし、実際の文字列は完全に任意ではありません。入力文字列に関する情報が分かっている場合(例:5文字未満)、高い確率で入力が一意です。残念ながら、SHA-1のようなハッシュ関数は意図的に計算上逆転できません。 SHA-1には理論的な攻撃がありますが、現時点では実現可能とは考えられていません。
したがって、ハッシュデータを回復する必要がある場合は、長さがn未満の文字列で、ハッシュが一致するかどうかを確認します。しかし、長さがnまで指数関数的に多くの文字列があるので、これはすぐに実行不可能になります。
ユニバースが終了する前にハッシュデータを復元する方法は1つあります()。唯一の希望は、rainbow tablesのようなより洗練された方法を使用することです。元の文字列が非常に短い(15文字未満)ことがわかっている場合は、のみが動作します。短い文字列であっても、テーブルの事前計算には長い時間(およびギガバイトのディスク容量)が必要です。
更新してください:それは非常に可能です、私はアルゴリズムが必要です。 [sha1-decrypter](http://www.stringfunction.com/sha1-decrypter.html)は、オンラインデクリプタを見つけることができるページへのリンクです –
@VineetVerma:それは解読者ではありません。これは逆引きです。使用するコードは本質的に 'Map
- 1. 暗号化/復号化方法に暗号化された文字列に '/'が含まれていない
- 2. テキスト暗号化/復号化方法Java
- 3. JavaとPHPの間の文字列の暗号化/復号化
- 4. AndroidとJavaで異なる文字列を暗号化/復号化する
- 5. JavaScript文字列の暗号化と復号化ですか?
- 6. ジェネリックハンドラでJavascriptと復号化のクエリ文字列暗号化
- 7. クエリ文字列パラメータの暗号化/復号化?シルバーライトのUsabe?
- 8. Grailsドメインクラスの列を暗号化/復号化する方法は?
- 9. AES暗号化は、復号化は、Java
- 10. 暗号化PHP、復号化Java
- 11. 暗号化と復号化Java Caesar Cipher
- 12. 暗号化と復号化 - Javaの
- 13. Java暗号化(PBEWithMD5AndDES)の復号化(PBEWithMD5AndDES)
- 14. C#/ Java | AES256暗号化/復号化
- 15. phpでの文字列の暗号化と復号
- 16. Javaの信頼性の低い文字列のRSA暗号化/復号化
- 17. AESでopensslコマンドラインツールで暗号化し、Javaで復号化する
- 18. Java文字列を暗号化
- 19. apache.commons.codecを使用してJavaクライアントで文字列を暗号化(.NETで暗号化)する方法Base64?
- 20. 復号化、暗号化
- 21. RSA暗号化/復号化
- 22. AES暗号化/復号化
- 23. 暗号化と復号化
- 24. python jsencryptで暗号化されたテキストの復号化
- 25. 暗号化/復号化でBase-64文字列に無効な文字が返される
- 26. Cで暗号化/復号化中に文字が失われました。#
- 27. PHPで暗号化された文字列をC#で復号化していますか?
- 28. RSA暗号化JavaでのAndroidと復号化:javax.crypto.BadPaddingException:復号化エラー
- 29. Chilkat:暗号化された電子メールを復号化する方法は?
- 30. 異なる出力を生成する文字列暗号化/復号化クラス
SHA-1は暗号化アルゴリズムではなくハッシュです。あなたがSHA-1ハッシュから文字列を抽出しようとしているなら、幸運を祈る。それは、プレイメージ攻撃と呼ばれています。 – Mysticial
sha1で暗号化されたデータは、暗号化された後は復号化されないため、計算資源と時間がかかる可能性があります。 – jsvk
私は、sha1を解読するのは計算上の労力を要する問題であると思います。 Javaとの関係は何ですか?良いアルゴリズムをお持ちの場合は、任意の言語を使用してコード化することができます。 –