次の方法を使用してエンコードされた文字列がありますが、この文字列を元の値にデコードする方法はありますか?ありがとう。
public synchronized String encode(String password)
throws NoSuchAlgorithmException, IOException {
String encodedPassword = null;
byte[] salt = base64ToByte(saltChars);
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.reset();
digest.update(salt);
byte[] btPass = digest.digest(password.getBytes("UTF-8"));
for (int i = 0; i < ITERATION_COUNT; i++) {
digest.reset();
btPass = digest.digest(btPass);
}
encodedPassword = byteToBase64(btPass);
return encodedPassword;
}
private byte[] base64ToByte(String str) throws IOException {
BASE64Decoder decoder = new BASE64Decoder();
byte[] returnbyteArray = decoder.decodeBuffer(str);
return returnbyteArray;
}
private String byteToBase64(byte[] bt) {
BASE64Encoder endecoder = new BASE64Encoder();
String returnString = endecoder.encode(bt);
return returnString;
}
SHA-256 は 暗号化(一方向)ハッシュ関数 であるため、直接デコードする方法はありません。暗号化ハッシュ関数の全体的な目的は、元に戻すことができないことです。
できることの1つは、 総当たり戦略 です。ハッシュされたものを推測し、同じ関数でハッシュして、一致するかどうかを確認します。ハッシュされたデータの推測が非常に簡単でない限り、long時間がかかる可能性があります。
「 パスワードのハッシュと暗号化の違い 」という質問に興味があるかもしれません。
注意する必要があります-Sha256は文字列のデータ/コンテンツを暗号化せず、代わりに入力文字列をシードとして使用して固定サイズのハッシュを生成します。
これが当てはまります-エンサイクロペディアのコンテンツを入力できます。これは、テキストのサイズが100 mbになると簡単ですが、結果の文字列のサイズは256ビットのままです。
ハッシュを逆にすること、固定サイズのハッシュから100 MBのデータを取得することは不可能です、できる限り、シードデータ、ハッシュを推測/計算して、ハッシュがハッシュと一致するかどうかを確認することですあなたが破ろうとしています。
ハッシュを元に戻すことができれば、これまでで最大の圧縮形式が得られます。
あなたは塩、別名SSHAを使用して正しいことをしました。
SHAおよびSHA-2(またはSHA-256)自体は、ソルトなしでは安全ではないと見なされます! SHAハッシュのソルティングは、ソルテッドSHAまたはSSHAと呼ばれます。
以下は、SHA-1を簡単にハッシュ解除できる簡単な例です。同じことは、SHA-2でもそれほど労力をかけることなく行うことができます。
このURLにパスワードを入力してください: http://www.xorbin.com/tools/sha1-hash-calculator ハッシュをコピーしてこのURLに貼り付けます: http://www.hashkiller .co.uk/sha1-decrypter.aspx
これは、SHA-2のハッシュを削除するページです。このページが機能する方法は、誰かがあなたのパスワードを事前にハッシュしている必要があります。そうでなければ、それを見つけることができません:md5hashing dot net/hashing/sha256
「寄付」のためにダウンロード可能な完全なSHA-2テーブルがあると主張するページがあります(まだ試していません):crackstation dot net/buy-crackstation-wordlist-password-cracking-dictionary.htm
SHAA経由でSSHAを使用する必要がある理由を説明する優れた記事を次に示します。crackstation dot net/hashing-security.htm
SHA *はハッシュ関数です。元のデータの表現(ハッシュ)を作成します。このハッシュは、元のデータを再作成するために使用されることを意図していません。したがって、暗号化ではありません。むしろ、同じハッシュ関数を同じ元のデータの2つの異なる場所で使用して、同じハッシュが生成されるかどうかを確認できます。この方法は、一般にパスワード検証に使用されます。