【步入验证安全2.0时代】-极验验证

      mygod,明天就考试啦,小编这次是抱着必挂的心态去考试了,~~~~(>_<)~~~~,这个挂科的几率高达60%…..,请不要讽刺小编,因为小编是学渣

     昨天小编在群里和他们聊天,偶尔发现一个新的验证系统-极验验证,这款验证系统十分的强大,下面将由小编带领大家去认识一下吧

    下面请看一段视频:

   【视频】


 

   看完视频后,大家是不是觉得这个验证系统特别棒,更重要的是减少了我们的验证时间,避免了每次输入验证码的麻烦- -,这套系统很安全,不信你看这个:

image

(极验验证/网站主/客户浏览器三方的通讯时序图)

 

说了这么多,发现我们忘了它的官网吧 - -,官网地址:http://www.geetest.com/

官网里没看到帮助文档,但是看到了使用说明:http://www.geetest.com/docs/sdk/build/html/sections/total_title.html

每种语言的demo已共享到github中,里面的代码的注释还是很全的:https://github.com/GeeTeam

只要你申请了账号你就可以在后台进行修改验证图片,查看报表等信息…,是不是更加的人性化了,一个验证码居然如此强大 ^ _^

 

在这里小编多说句,小编认为自己是个很热爱观察的人(此处应该有坏笑..),小编通过网易科技了解到极验验证(下面一段话来自网易科技):

image

附链接:http://tech.163.com/14/0514/16/9S7HTCH000094ODU.html

 

由于小编比较喜欢Android,所以就学习了下Android端的极验验证,下面给予讲述(精彩内容即将开始,啦啦啦啦)

【效果图】

111

【步骤】

1 .使用的时候你需要引入极验验证的SDK(附sdk:https://github.com/GeeTeam/gtapp-android#id9)

2.下面使用的代码为demo中的代码,只不过在里面给予修改:

   下面小编贴下代码:

package com.gt.demo;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Toast;

import com.geetest.sdk.GeetestLib;
import com.geetest.sdk.GtDialog;
import com.geetest.sdk.GtDialog.GtListener;
import com.geetest.sdk.SdkInit;

public class MainActivity extends Activity {

    private SdkInit sdkInitData = new SdkInit();

    // TODO get your own captcha id
    private String captcha_id = "Your captcha id";  //此处替换为你的captcha的id
    private Context context = MainActivity.this;
    private GeetestLib geetestLib = new GeetestLib();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btn_gtapp_sdk_demo_dlg).setOnClickListener(
                new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        geetestLib.setCaptchaId(captcha_id);
                        new GtAppDlgTask().execute();
                    }
                });
    }

    class GtAppDlgTask extends AsyncTask<Void, Integer, Integer> {

        @Override
        protected Integer doInBackground(Void... params) {
            return geetestLib.preProcess();
        }

        @Override
        protected void onPostExecute(Integer serverStatusCode) {

            if (serverStatusCode == 1) {

                sdkInitData.setCaptcha_id(captcha_id);
                sdkInitData.setChallenge_id(geetestLib.getChallengeId());
                sdkInitData.setContext(context);
                openGtTest(sdkInitData);

            } else {
                // TODO 使用自己的验证码体系来进行判断。或者不做任何处理
                Toast.makeText(
                        getBaseContext(),
                        "Geetest Server is Down,Please Use your own system or disable the geetest",
                        Toast.LENGTH_LONG).show();
            }
        }
    }

    public void openGtTest(SdkInit initData) {
        GtDialog dialog = GtDialog.newInstance(initData);


        dialog.setGtListener(new GtListener() {

            @Override
            public void gtResult(boolean success, String result) {
                // TODO Auto-generated method stub
                if (success) {
//                    
//                    // TODO captcha
//                    toastMsg("client captcha succeed:" + result);
//                    // TODO If captcha is succeed on client side ,then post the
//                    // data to CustomServer to setup the second validate
//                    try {
//                        JSONObject res_json = new JSONObject(result);
//
//                        //TODO Demo use of captcha
//                        String custom_server_validate_url = "http://testcenter.geetest.com/gtweb/android_sdk_demo_server_validate/";
//
//                        Map<String, String> params = new HashMap<String, String>();
//
//                        params.put("geetest_challenge",
//                                res_json.getString("geetest_challenge"));
//                        params.put("geetest_validate",
//                                res_json.getString("geetest_validate"));
//                        params.put("geetest_seccode",
//                                res_json.getString("geetest_seccode"));
//                        String response = geetestLib.submitPostData(
//                                custom_server_validate_url, params, "utf-8");
//                        
//                        toastMsg("server captcha :" + response);
//
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
                    toastMsg("验证成功");
                    finish();
                    Intent i=new Intent(context,SecondActivity.class);
                    startActivity(i);
                    

                } else {
                    // TODO 验证失败
                    toastMsg("client captcha failed:" + result);
                }
            }

            @Override
            public void closeGt() {
                toastMsg("Close geetest windows");
            }
        });
        dialog.show();
    }

    private void toastMsg(String msg) {
        Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();
    }

}

 

【分析】

在这部分代码中,首先通过一个按钮来实现点击事件,点击处理事件为加载一个异步操作,这个异步操作是为了实现设置captcha_id和创建验证对话框,至于异步任务吧,我相信你懂得,在异步任务中,通过检查服务器的状态来绝对是否弹出验证信息框,如果服务器返回码为1,则成功连接至服务器,然后进行打开验证框的操作,在这里我们会重写回调函数:

image

 

至此一个最基本的验证已经完成,至于添加相关的应用权限,请看下:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

 

 

至于如何使用极验验证官方的android sdk,请看下述:

假设用户自建项目名称为:CustomerProject

  1. 在极验官方主页www.geetest.com注册账号并申请相应的应用公钥,id:{{id}}
  2. 将gt-android-sdk项目和CustomerProject项目Import到同一个工作空间
  3. 将gt-android-sdk项目以Android Library的方式进行引用 右键项目-Properties-Android-Library-Add即可

 

 

-----------------------------------------------------------这是一条帅气的分割线-----------------------------------------------

 

讲完了以后,是不是觉得这个极验验证的时候还是比较容易上手的,没错,就是比较容易上手的

在此:小编做个宣传:

欢迎大家加入极客学院_滨院群,在这里有美女,也有屌丝,在这里你将会一展你的风采,I Want You ^_^

我们的群号:471647556

我们的二维码(欢迎拿起你的手机“啪啪啪”):

1436692747457

 

posted @ 2015-07-12 17:21  monsterLin  阅读(3934)  评论(0编辑  收藏  举报
小弟博客地址迁移,欢迎戳这里查看新博客~