-1

次のように、入力でキャプチャ暗号化された値を取得しています。

value="     JFIF         >CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default      quality
   C $.' ",#(7),01444'9=82<.342    C2!!22222222222222222222222222222222222222222222222222    ( x"           

   } !1AQa "q2   #B  R  $3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz                                                                            
   w !1AQ aq"2 B     #3R br 
$4 % &'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz                                                                             ?   Ԓ 61N 7I v n     %   O;pHU   C8Xn   "  + 8   s c NNGw e ֱx4裴   Ԡ;+ uv i  Q ea @@     [ o H.       D!K7 6 ) CR nq   t3m  O R   g$  L  Ź `:ǘ s6   n| U PC   h M         7y F W     X    R RX8u  c \c )]  kw$ p _ w    > 5    ˩P ̪ 4h? .7n Th +mbn\ ,    ][Ķ|   I$pe "  

上記の文字列ではなく、'CDEF01jhdfz' のような通常の暗号化された文字列を取得するにはどうすればよいですか? 暗号化の問題だと思います..ここに私のコードがあります:

    function str_encrypt( $str ) {
       $mystr = index_array( $str, KEY_VALUES );
       $mystr = mybase64_encode( rawurlencode( $mystr ) );
       return $mystr;
    }
    function str_decrypt( $str ) {
       $mystr = rawurldecode( mybase64_decode( $str ) ) ;
       $mystr = index_array( $mystr, KEY_VALUES );
       return $mystr;
    }  
    $captcha = new CaptchaCode();
    $code = str_encrypt( $captcha->generateCode(6) );
    $captcha1 = new CaptchaImages();
    $captcha1->GenerateImage( $width, $height, str_decrypt( $code ) );
    echo $code;

i m getting $code value through below function on my index.php:

    jQuery.get('<?php echo captcha_images.php ?>', function( encoded_code ) {
        jQuery('#security_check').val( encoded_code );
    }
4

2 に答える 2

0

複雑なコードは必要ありません。通常、セッション経由でコードを渡します。

image_captcha.php は、19m92d9193jf9 のようなコードを作成します。md5() を使用して生成し、substr() を使用して短くすることができます。

このコードで画像を表示し、この値をセッション変数に設定します。

したがって、現在の php ファイルは、これ以上の努力なしでこの値を取得できます。画像にアクセスするだけです。

image_captcha.php

    $basepath = DIR_VIEWS.'/captcha/';

    $code = substr(md5(time()),0,7);

    $_SESSION['code_captcha'] = $code;

    $imageCaptcha = imagecreatefrompng($basepath."background.png");
    $fontCaptcha = imageloadfont($basepath."anonymous.gdf");

    $color = imagecolorallocate($imageCaptcha,rand(1,255),0,0);

    imagestring($imageCaptcha,$fontCaptcha,15,rand(3,10),$codigoCaptcha{0},$color);
    imagestring($imageCaptcha,$fontCaptcha,35,rand(3,10),$codigoCaptcha{1},$color);
    imagestring($imageCaptcha,$fontCaptcha,55,rand(3,10),$codigoCaptcha{2},$color);
    imagestring($imageCaptcha,$fontCaptcha,75,rand(3,10),$codigoCaptcha{3},$color);
    imagestring($imageCaptcha,$fontCaptcha,125,rand(3,10),$codigoCaptcha{4},$color);
    imagestring($imageCaptcha,$fontCaptcha,145,rand(3,10),$codigoCaptcha{5},$color);
    imagestring($imageCaptcha,$fontCaptcha,165,rand(3,10),$codigoCaptcha{6},$color);

    header("Content-type: image/png");

    imagepng($imageCaptcha);
    imagedestroy($imageCaptcha);
    exit();

このファイルにアクセスします。

<img src="image_captcha.php"/> 

ここで、キャプチャ コードを確認する準備ができました。

于 2013-09-11T06:57:16.460 に答える
0

私があなたのコードとコメントを理解していればcaptcha_images.php、RAW JPEG 画像を生成して送信する未公開のスクリプトが呼び出されています。次に、クライアント側 JavaScript を使用して HTWML 属性に適合させます。

jQuery.val()メソッドはプレーンテキストを期待しています:

.val(値)

value
Type: String or Array

選択/チェック済みとして設定する、一致した各要素の値に対応するテキストの文字列または文字列の配列。

... HTML 自体はまったくバイナリ形式ではないため、これは完全に理にかなっています。

Content-Type: text/html
              ^^^^

これは、後で元のバイナリ データを取り戻すことが不可能であることを意味します。それをテキストに変換するプロセスは、それを破壊します。

«通常の暗号化された文字列»が何を意味するのかはわかりませんが、おそらくサーバーからすぐに使用できる状態で送信する必要があります。

于 2013-09-11T09:43:54.590 に答える