2016-08-25 22 views
0

は、pythonをPHPに変換する際に問題が発生しました。shaを使ってpythonコードをPHPに変換する

user = "DdrkmK5uFKmaaeNqfqReMADSUJ4sVSLrV2A8Bvs8" 
passing = "K9hvwANSBW5tLYzuWptWMByTtzZZKHzm" 

sha = hashlib.sha256() 
sha.update(user) 
sha.update(passing) 
sha_A = [ord(x) for x in sha.digest()] 

sha_Aは、以下の配列である:私はPythonで次のコードを持って

[231、13、239、136、20、198、76、121、67、163、251、 153、114、13、65、203、41、37、64、168、43、69、81、103、235、161、15、58、82、57、217、178]


IすでにそれをPHPに変換しました:

$user = "DdrkmK5uFKmaaeNqfqReMADSUJ4sVSLrV2A8Bvs8"; 
$passing = "K9hvwANSBW5tLYzuWptWMByTtzZZKHzm" 

$sha = hash_init("sha256"); 
$sha = hash_update($sha, $user); 
$sha = hash_update($sha, $passing); 

$sha_A = []; 
$i = 0; 
$digest = openssl_digest($sha, "sha256"); 
$digest = str_split($digest); 
foreach ($digest as $x) { 
    $sha_A[$i] = ord($x); 
    $i = $i + 1; 
} 

返された配列は、次のようになります。

[101,51,98,48,99,52,52,50,57,56,102,99,49,99,49,52,57 、97,102,98,102,52,99,56,57,57,54,102,98,57,50,52]

多分あなたの間違いを見つけられる人がいますか?

答えて

0

PHPコードでエラーが発生しました。

これは、Pythonのスニペットです:

>>> sha = hashlib.sha256() 
>>> sha.update(user) 
>>> sha.update(passing) 
>>> sha_A = [ord(x) for x in sha.digest()] 
[135, 146, 107, 215, 70, 126, 179, 21, 19, 177, 191, 236, 182, 136, 192, 53, 148, 42, 160, 24, 63, 224, 170, 211, 32, 131, 59, 146, 60, 162, 77, 2] 

そして、PHPのバージョン、修正:あなたのPHPのバージョンで

$ctx = hash_init('sha256'); 
hash_update($ctx, $user); 
hash_update($ctx, $passing); 
$digest = hash_final($ctx, true); 

$sha_A = []; 
foreach (str_split($digest) as $x) { 
    $sha_A[] = ord($x); 
} 
[135, 146, 107, 215, 70, 126, 179, 21, 19, 177, 191, 236, 182, 136, 192, 53, 148, 42, 160, 24, 63, 224, 170, 211, 32, 131, 59, 146, 60, 162, 77, 2] 

hash_updateはブール値を返すので、$sha = hash_update($sha, $user);が悪かったです。最初の引数はcontextとなり、結果はhash_initであり、2番目の引数はハッシュするデータです。最後に、hash_finalに最後のパラメータ(raw_output)をtrueに設定してバイナリデータを取得します。

最後のエラーは、SHA結果のopenssl_digestを使用してSHAダイジェストのダイジェストを計算していたことです。面白いですね。 :)。

+0

ありがとうございます。それは私を助けている:)しかし、次の部分は何ですか:sha_A = sha.digest(xのxのord(x))私は正しく変換しましたか? – razzru80

+0

私もこの部分を修正しました;) –