2017-02-27 32 views
2

文字列を復号化せずに別の文字列をsha256表現していることを検証したいと思います。これは可能ですか?java - 文字列がsha256ハッシュであることを確認する方法はありますか?

+3

ハッシュは暗号化ではありません。あなたが今尋ねていることは非常に不明です。基本的にハッシュを検証する方法は、文字列を再ハッシュし、同じハッシュを取得するかどうかを確認することです。 –

答えて

2

sha-256値は通常、JavaでStringまたはbyte[]として表す256ビット(32バイト)の値です。

値自体は意味がありません。特定のStringがハッシュであるかどうかを知りたい場合は、32バイトの数値は無限の未知のプレーンテキストのハッシュです。しかし、それは "32バイトの数字が数字であることをどのように知るのですか?"と尋ねるようなものです。あなたはどこにも行きません。

プレーンテキストとペアにしてプレーンテキストから計算されたハッシュと比較して、一致することを検証できる場合にのみ便利です。

+0

"* 32バイトの数字は無限の未知の平文のハッシュです*" =>本当に2^32の可能なSHA256値がありますか? – assylias

+0

http://crypto.stackexchange.com/questions/2670/is-every-output-of-a-hash-function-posable – assylias

+0

@assylias:おそらく '2 ^(32 * 8)'の可能なSHA256値を意味しますが、あなたの質問には答えがありません。それは関係するハッシュ関数に固有のものです。任意の可能な長さの無限の可能性のあるプレーンテキストを仮定すると、関数自体が適切であれば、ハッシュ関数のコドメインを完成させることができる。それを証明することは別の話です。 – Jack

1

あなたができることは、他の文字列をハッシュし、これらの2つの文字列を互いに比較することだと思います。
これはあなたを助けてくれるのではないでしょうか。しかし、私はパスワード挑戦を打ち破るためにレインボーテーブルを作成するときによく使われることを読んでいます。
編集:ああ、これはまた、WebページiircにログインするときにPHPのパスワードを比較する方法です。
少なくとも私は大学のためにこれをやらなければならなかった。

+1

これは、2つの値によって使用されているハッシュが同じであるかどうかわからないため、機能しません。 – CLR45

+1

私は間違っている場合は私を修正しますが、OPはそれがsha2ハッシュだと言ったので、phpのmd5関数のように、それをハッシングの標準的な関数があるはずです。 – clockw0rk

1

特定のルールで文字列を解析し、その文字列をshaハッシュとして修飾しようとすることができます。次の投稿はあなたの質問How to determine whether a string is a hashに答えるかもしれません。

3

はい、いいえ。

文字列が非常に簡単に16進数であることをテストできます。統計的に賢明な数字と文字が含まれていることをテストできます。これはいくつかの共通の非sha256文字列を除外します。

しかし、誰かがsha256のように見えるように設計されたランダムな文字列を作成した場合、私はそれを実際のものから数学的なテストで区別することはできないと思います。アルゴリズムはそれに対して堅牢に設計されています。

関連する問題