2016-06-25 8 views
4

私はPHPに変換しようとしているJavaScript関数を持っています.CryptoJSライブラリを使用しています。具体的にはcomponents/enc-base64-min.jsrollups/md5.jsです。彼らはhereを見つけることができます。それにPHPを使用してCryptoJS.enc.Base64と同じ結果を生成

コード

// Let's say str = 'hello'; 

var md5 = CryptoJS.MD5(str); 
md5 = md5.toString(CryptoJS.enc.Base64); 
// md5 outputs "XUFAKrxLKna5cZ2REBfFkg==" 

のこのビットが私はstr変数は、その後のBase64にエンコードされたMD5を使用してハッシュされると仮定ので、私はその後、私は両方の検証を試みたこの単純なコード

$md5 = md5($str); 
$md5 = base64_encode($md5); 
// md5 outputs "MmZjMGE0MzNiMjg4MDNlNWI5NzkwNzgyZTRkNzdmMjI=" 

を試みています出力は、JS出力が有効なBase64文字列ではないようです。なぜCryptoJS.enc.Base64が使用され、私はW3SchoolsからtoString()パラメータを探してみましたが、パラメータは整数(2、8または16)であることを想定している参照ごとに、それは、私には意味をなさないdoesntの更なる理解する

代わりに?

ここでの目標は、JSを使用して有効なbase64エンコードされた文字列を生成するのではなく、PHPを使用して同じ出力を生成することです。

+0

MD5は16バイトのバイナリを生成します出力。ベース64は各6ビットを8ビットのASCII文字にエンコードします。 16 * 8/6 = 21.3バイト、Base64は出力を4バイトの倍数にパディングします。このMD5出力のbase64エンコードは、最初の例と一致する24バイトの出力を生成します。 2番目の例では、44バイトの出力が生成されるため、正しくありません。 – zaph

+0

@zaph詳細を教えてくれてありがとう –

答えて

4

phpのmd5()パラメータを1つ指定すると、のようにmd5ハッシュが返されます。

代わりに、あなたは(trueに設定)md5()にあまりにもオプションのパラメータ$raw_outputを渡すために持っているので、生のバイトがBase64でにエンコードしたい

$md5 = md5($str, true); 

http://php.net/manual/it/function.md5.php

+0

本当に間違いありません。どうもありがとうございます! –

関連する問題