コード:PHP mcryptの問題
function sign($data,$iv,$hexKey){
$_cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$binKey32 = hex2bin($hexKey);
$block = mcrypt_get_block_size('des', MCRYPT_MODE_CBC);
$pad = $block - (strlen($data) % $block);
$data .= str_repeat(chr($pad), $pad);
mcrypt_generic_init($_cipher, $hexKey, $iv);
$result = mcrypt_generic($_cipher, $data);
mcrypt_generic_deinit($_cipher);
return strtoupper(substr(bin2hex($result),0,32));
}
問題は、たとえば、私はこの関数を呼び出した場合ということです:
$sign = sign("string", "strinGGnirts", "1234567812345678123456781234567812345678123456781234567812345678");
このエラーがoccurrs:(3番目のパラメータを関数内で)
mcrypt_generic_init():キーのサイズが大きすぎます。提供された長さ:64、最大:32
第3のパラメータは静的キーであり、64文字の長い文字列でなければなりません。それは小さくはありません。私は(関数内の第二パラメータ)
てmcrypt_generic_init()
MCRYPT_RIJNDAEL_256
のためではなく、このエラーoccurrs後MCRYPT_RIJNDAEL_128
を変更しようとしました:間違ったIvのサイズ。付属の長さ:16、必要に応じ:32
私は私を助ける誰か:)
EDITがあることを願っています:
全体のテストファイル:
<?php
function sign($data,$iv,$hexKey){
$_cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$binKey32 = hex2bin($hexKey);
$block = mcrypt_get_block_size('des', MCRYPT_MODE_CBC);
$pad = $block - (strlen($data) % $block);
$data .= str_repeat(chr($pad), $pad);
mcrypt_generic_init($_cipher, $binKey32, $iv);
$result = mcrypt_generic($_cipher, $data);
mcrypt_generic_deinit($_cipher);
return strtoupper(substr(bin2hex($result),0,32));
}
$sign = sign("demoOMED"."10.50"."EUR"."10000"."Michal"."Test"."2015-05-05 14:57:13", "demoOMEDDEMOomed", "1234567812345678123456781234567812345678123456781234567812345678");
print_r($sign);?>
<form method="post" action="https://doxxsl-staging.24-pay.eu/pay_gate/paygt" >
<input type="hidden" name="Mid" value="demoOMED">
<input type="hidden" name="EshopId" value="11111111">
<input type="hidden" name="PreAuthProvided" value="false">
<input type="hidden" name="MsTxnId" value="10000">
<input type="hidden" name="Amount" value="10.50">
<input type="hidden" name="CurrAlphaCode" value="EUR">
<input type="hidden" name="ClientId" value="170">
<input type="hidden" name="FirstName" value="Michal">
<input type="hidden" name="FamilyName" value="Test">
<input type="hidden" name="Email" value="[email protected]">
<input type="hidden" name="Street" value="Kalov">
<input type="hidden" name="Zip" value="01001">
<input type="hidden" name="City" value="Žilina">
<input type="hidden" name="Country" value="SVK">
<input type="hidden" name="Timestamp" value="2015-05-05 14:57:13">
<input type="hidden" name="Sign" value="<?php echo $sign;?>">
<!-- PARAMETER DEBUG USE ONLY WHILE TESTING -->
<input type="hidden" name="Debug" value="true">
<input type="submit" value="Test">
は、
これらのデータを使用して、Sign関数で出力しました:6C4BBF9D2EC23D03E010AA94B5A7E174(INCORRECT)
0123門のテスト環境には、同じデータを持つサインさ:FCBA944122EF996CE6E50B6229753CA7(CORRECT)
編集:画像などのドキュメントの
パート:
http://i.imgur.com/hNkuRoq.png
EDIT2:彼らが送られてきたが私は新しい(作業)クラスなので多分誰かを助けるでしょう:) http://pastebin.com/DKiXPMiE
私は使用する必要がある1つのペイメントゲートの開発者からの機能です。実際には私は同じ出力が必要ですが、私は機能する必要があります。正しい出力がなければ私はゲートにアクセスすることができません。だから、私はより良い暗号化やそのようなもので機能を作ることはできません。 – UareBugged
彼らが話しているドキュメントの一部があります。そのサインはどのように見えるのですか?http://i.imgur.com/hNkuRoq.png。キーは、64文字の長さの第3パラメータです。 IVは第2パラメータである。それは単なるストリング+逆のストリングです。最初のパラメータは、ほんの少しの文字列の組み合わせです。 – UareBugged
http://stackoverflow.com/a/1628177/5006740 – strangeqargo