ウェブサイトのプラットフォームをJavaからPHPに変更する必要があると思いますが、私はすべてのユーザーのパスワードを保持したいと思います...PHPでこれと同じJava SHA-1を入手できますか?
このコードでは、ハッシュ値をウェブサイトへのパスワード:
MessageDigest md = null;
md = MessageDigest.getInstance("SHA");
md.update(plaintext.getBytes("UTF-8"));
byte raw[] = md.digest();
hash = new Base64().encodeToString(raw).replaceAll("\n", "").replaceAll("\r", "");
私は、Javaコードは、パスワードのSHA-1ハッシュをしましたが、直前にそれがUTF-8にエンコードされたバイトだったし、その後それはBase64エンコードされたことと思います。
私はPHPコードを同じようにしたいと思います。すなわち、Javaと同じパスワードのハッシュと同じ値を返します.Sha-1ハッシングを実行しているPHPコードはそうではないようですハッシュのJava Base64でデコードされた値と比較した場合、同じSHA(-1、エンコードされたBase64ではなく、-1)を返します。PHPのパスワードがUTF-8でないという事実と関係がありますか最初にエンコードされたバイト(と私はPHPでそれを行うことができます)してください?
P.S. Javaで
別の奇妙な...私のパスワードはすべて28characters長い(このrnwn4zTNgH30l4pP8V05lRVGmF4=
のような通常のもの)です...しかし、これらのパスワードハッシュのBase64().decode(hash)
値が長い10文字(例[[email protected]
)です。
私はBase64が各3つのチャーター(28または27、パディング=チャーターを除いて、それらの10チャプターより3分の1大きい)を1文字追加したと思っています。 ??
さらに、PHPのSHA-1パスワードのハッシュ値は、dd94709528bb1c83d08f3088d4043f4742891f4f
のように40文字(UTF-8 mysqlデータベース内)ですか?
コードを適切に書式設定する必要があります。すべての行の前に4つのスペースまたはタブを置きます。 – Donovan
@Alberteddu:コードを選択して '{}'アイコンをクリックすると、SOで実行できます。 – SyntaxT3rr0r
'[B @ 14e1f2b'は' Base64()。decode(hash) 'の値ではありません。' ['+ ArrayType +' @ '+ hashCode]の形式の配列の通常のString表現です。あなたがしたいのは、単純に 'System.out.println(array_var);と書くのではなく、配列を反復することです。 – Progman