次に、Java検証コードの生成の以前の記事(パート1)では、Java検証コードに関する関連する知識を紹介します!
方法3:
Springと組み合わせて、オープンソースコンポーネントJcaptchaで実装され、さまざまな形式の検証コードを生成できます。 JcaptchaはCaptchaプロジェクトのJavaバージョンです。これは、グラフィックスバージョンとサウンドバージョンの検証コードの生成をサポートするオープンソースプロジェクトです。サウンドバージョンの検証コードを生成する場合、FREETTSが必要です。 Captchaのフルネームは、ComputersとHuman Abartを伝えるための完全に自動化された公開チューリングテストが、最初にカーネギーメロン大学で科学研究プロジェクトとして使用されました。人間が簡単に通過するのが簡単ですが、コンピューターが合格するのは難しいテストを生成するために使用されました。現在、ネットワークアプリケーションで広く使用されており、ロボットがスパム情報の公開を防ぐために使用されています。現在、公式のJCaptchaのWebサイトはバージョン2.0があることを示していますが、バイナリバージョンはダウンロード用のバージョン1.0のみです。
まず、対応するJARパッケージを準備する必要があります
JCAPTCHAプロジェクトの実装では、コモンズコレクションとコモンズロギングの2つのオープンソースプロジェクトも参照しています。さらに、JCaptcha自体の実装には、合計3つのパッケージが必要であり、特定の情報は次のとおりです。
jcaptcha-2.0-all.jarcommons-logging-1.1.1.jarcommons-collections-3.2.jar
第二に、以下のWeb.xmlのキー構成情報を見てみましょう。JCAPTCHAコンポーネントの特定のクラスパスの構成に加えて、比較検証コードのサーブレットとして使用され、両方がマッピングされているSubmitactionServletも構成されています。名前を変更すると理解できます。 /jcaptcha.jpgと /submit.actionでコンポーネントまたはサーブレットをそれぞれ呼び出すと、このマッピング名を使用するために直接使用できます。
<Servlet> <Servlet-Name> Jcaptcha </servlet-name> <servlet-class> com.octo.captcha.module.servlet.image.simpleimagecaptchaservlet </servlet-class> </servlet> <servlet> <servlet-name> submit </servlet-name> <サーブレットクラス> com.octo.captcha.module.servlet.image.sample.submitactionservlet </servlet-class> </servlet> <servlet-name> jcaptcha </servlet-name> <url-pattern>/jcaptcha.jpg </url-therstern> <Servlet-Name>送信</servlet-name> <url-pattern>/submit.action </url-pattern> </servlet-mapping>
web.xml
次に、submuncationservletがどのように実装されているかを見てみましょう:jcaptchaコンポーネントパッケージがインポートされるため、特定の実装プロセスを確認せずに検証コードの情報が提出と一致するかどうかを決定するために、campsimagecaptchaserponse.validateresponse.validateresponse.validateresponse(リクエスト、usercaptcharesponse)が直接呼び出されます。
Public Class SubmicationServletは、httpservletを拡張します{保護されたvoid dopost(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {string usercaptcharesponse = request.getparameter( "japtcha"); boolean captchapassed = simpleimagecaptchaservlet.validateresponse(request、usercaptcharesponse); if(captchapassed)response.getWriter()。write( "captcha passed"); else {response.getWriter()。write( "captcha failed"); } response.getWriter()。write( "<br/> <a href = 'index.jsp'>再試行</a>"); }} submitactionServlet最後に、簡単なフロントデスクコールを見てみましょう。
<html> <body> <h>シンプルなキャプチャサーブレットサンプル</h> <フォームアクション= "submit.action" method = "post"> <img src = "jcaptcha.jpg"/> <inputタイプ= "テキスト" name = "japtcha" value = ""/> <inputタイプ= ""/>
実装の凡例:
方法4:
オープンソースコンポーネントKaptchaで実装されています。また、Kaptchaを使用するには、JARコンポーネントパッケージをダウンロードする必要があります。 Kaptchaは非常に実用的な検証コード生成ツールです。それを使用すると、構成可能であるため、さまざまなスタイルの検証コードを生成できます。 Kaptcha Worksの原則は、com.google.code.kaptcha.servlet.kaptchaservlet(Googleのオープンソースプロジェクトであることがわかります)を呼び出して画像を生成することです。同時に、生成された検証コード文字列をhttpsessionに入れます。
Kaptchaを使用して、便利に構成します。
検証コードフォントサイズ検証コードフォントサイズ検証コードフォントカラー検証コードコンテンツ範囲(数、文字、漢字!)検証コードの画像サイズ、境界線、境界厚、境界色検証コード干渉ライン(com.google.kode.kaptcha.noiseproducerを継承することができます) com.google.code.kaptcha.gimpyengineカスタムスタイル)
...
Kaptchaの構成情報は、Web.xml:<init-param>タグの初期化された構成情報にも配置されます。
<Servlet> <Servlet-Name> Kaptcha </servlet-name> <servlet-class> com.google.code.kaptcha.servlet.kaptchaservlet </servlet-class> <init-param> <description>画像ボーダー、法的価値:はい、いいえ、いいえ</説明> <パラメラ> kaptcha. </init-param> <init-param> <説明>ボーダー色、法的価値:r、g、b(およびオプションのアルファ)または白、黒、青。 </description> <param-name> kaptcha.border.color </param-name> <param-value> black </param-value> </init-param> <init-param> <init-param> <説明>境界厚、法的価値:>/説明>/説明> <param-name> kaptcha.border.thicknes <Init-Param> <Init-Param> <説明>画像幅</説明> <Param-name> Kaptcha.image.Width </param-name> <param-value> </param-value> </init-param> <init-param> <説明</init-param> <init-param> <description>画像実装クラス</describe> <param-name> kaptcha.producer.impl </param-name> <param-value> com.google.code.kaptcha.impl.defaultkaptcha </param-value> </init-param> <説明> < <param-name> kaptcha.textproducer.impl </param-name> <param-value> com.google.code.kaptcha.text.impl.defaulttextcreator </init-param> <init-param> <説明>テキスト収集は、このコレクションで得られます</説明> <param-name> kaptcha.textproducer.char.string </param-name> <param-value> </param-value> <! - <param-value> abcdegfynmnpwx </param-value>> <! - <param-value> mooch.com Tutorial verification code長さ</説明> <param-name> kaptcha.textproducer.char.length </param-name> <param-value> </param-value> </init-param> <init-param> <説明> font arial、courier </descripier> <param-name> kaptcha.textproducer.font.names </param-value> </param-value> </init-param> <init-param> <説明>フォントサイズpx。</description> <param-name> kaptcha.textproducer.font.size </param-name> <param-value> </param-value> </init-param> <init-param> <説明</description> <param-name> kaptcha.textproducer.font.color </param-name> <param-value> black </param-value> </init-param> <init-param> <説明> <param-name> kaptcha.textproducer.char.space </param-name> </param-value> <Init-Param> <説明>干渉実装クラス</説明> <param-name> kaptcha.noise.impl </param-name> <param-value> <! - com.google.code.kaptcha.impl.nonoise-> com.google.code.kaptcha.impl. <説明>干渉色、法的価値:R、G、B、または白、黒、青。 </description> <param-name> kaptcha.noise.color </param-name> <param-value> black </param-value> </init-param> <init-param> <descripe>画像スタイル:ウォーターステッチcom.google.google.code.kaptcha.impl.waterripple fisheyecom. Shadowcom.google.code.kaptcha.impl.shadowgimpy </description> <param-name> kaptcha.obscurificator.impl </param-name> <param-value> com.google.code.kaptcha.impl.waterriple </param-value> <param-name> kaptcha.background.impl </param-name> <param-value> com.google.code.kaptcha.impl.defaultbackground </param-value> </init-param> <description>背景色グラデーション、開始色</説明> <パラマネーム<param-value> green </param-value> </init-param> <init-param> <description>背景色グラデーション、エンドカラー</descripe> <param-name> kaptcha.background.clear.to </param-name> <param-value> white </param-value> </init-param> <init-param <param-name> kaptcha.word.impl </param-name> <param-value> com.google.code.kaptcha.text.impl.defaultwordrenderer </param-value> </init-param> <init-param> <init-param> <説明<param-value> kaptcha_session_key </param-value> </init-param> <init-param> <説明> kaptchaが生成される日付はhttpsessionに入れられます。これは、セッションのそのアイテムの重要な値です。 </description> <param-name> kaptcha.session.date </param-name> <param-value> kaptcha_session_date </param-value> </init-param> </servlet> <servlet-name> kaptcha </servet-name> <url-pattern>
フロントコール:検証コードイメージのパスはrandomCode.jpgでマッピングされ、クリックイベントonclick()はjs関数を呼び出します。 JS関数の同じ時間は、現在の時刻を使用してブラウザキャッシュを無効にして検証コードイメージを更新します。
<html> <head> <メタhttp-equiv = "content-type" content = "text/html; charset = utf-"> <title> randomcode </title> <script> <script type = "text/javascript"> function changer(node){//異なる検証コードを生成するために使用されます。 date()。getTime(); } </script> </head> <body> <img src = "randomcode.jpg" onclick = "changer(this)" style = "cursor;"> <form action = "check.jsp"> <input "text" name = "r"> <inputタイプ= "" Value = "check.jsp:検証コード画像で文字列情報を(string)session.getattribute(com.google.code.kaptcha.constants.kaptcha_session_key);
<html> <head> <メタhttp-equiv = "content-type" content = "text/html; charset = utf-"> <title> check </title> </head> <body> <%//正しい検証コード文字列k =(string)session.gettribute(com.google.kapttribute.kapt.conttants.conttants.conttants.conttants.kapttribute) string str = request.getParameter( "r"); if(k.equals(str))out.print( "true"); out.print(k + "---" + str); %> </body> </html>
実装の凡例:
検証コードはますますカラフルになっていることがわかりますが、英語の文字と数字のみを確認する段階にあります。それで、私たちはまだいくつかのハイエンドのものを演奏できますか?答えはイエスです。次に、中国の検証コードと算術検証コードを実装する方法を見てみましょう。それらはすべて、カプタチャの上記の使用に基づいて修正するだけです。
中国の検証コードの実装:
最初に、kaptcha.jarパッケージの下にdefaulttextcreator.class bytecodeファイルを見つけます。名前が示すように、検証コードでテキストを生成するクラスです。自分で継承されたクラスを実装し、独自の実装クラスを使用して、構成を通じて検証コードのテキストを中国語にすることができます。次の逆コンパイルの後、それがそのように実装されていることがわかります。 getText()関数は、getConfig()configuratorがレンダリングする検証コードテキストを生成するために使用されるため、構成クラスを継承してテキスト生成インターフェイスを実装し、getText()メソッドを上書きする必要があります。
public class defaultTextcreator拡張設定可能な実装extent textProducer {public string getText(){int length = getConfig()。getTextProducerCharLength(); char [] chars = getConfig()。getTextProducerCharstring(); int randomcontext = chars.length-;ランダムrand = new Random(); stringbuffer text = new StringBuffer(); for(int i =; i <length; i ++){text.append(chars [(rand.nextint(randomcontext)+)]); } text.toString()を返します。 }}以下は、ChineseText.javaの特定の実装です。プログラムは、getText()でコードのみを実行します。元のコードはgetText1()で記述されており、実行しません。比較することができます。
public class chineseText拡張設定可能な実装textproducer {public string getText(){int length = getConfig()。getTextProducerCharlength(); // char [] chars = getConfig()。getTextProducerCharstring(); string [] s = new String [] {"i"、 "love"、 "tab"、 "trow" and "、" sell "、" screw "、"ボタン " sb.toString(); ""、 "、" a "、" b "、" c "、" d "、" e "、" f "};ランダムrand = new Random(); for(int i =; i <length; i ++){switch(rand.nextint(array.length)){case:tempint = rand.nextint()+; firstword = string.valueof((char)tempint);壊す;ケース:Int R、R、R、R; string strh、strl; // high&low r = rand.nextint() +; //フロントを閉じて開きます[、)if(r ==){r = rand.nextint(); } else {r = rand.nextint(); } r = rand.nextint() +; if(r ==){r = rand.nextint() +; } else if(r ==){r = rand.nextint(); } else {r = rand.nextint(); } strh = array [r] + array [r]; strl = array [r] + array [r]; byte [] bytes = new byte []; bytes [] =(byte)(integer.parseint(strh、)); bytes [] =(byte)(integer.parseint(strl、)); firstword = new String(bytes);壊す;デフォルト:tempint = rand.nextint() +; firstword = string.valueof((char)tempint);壊す; } finalword += firstword; } finalwordを返します。 }}最後のステップは、web.xmlのテキスト実装クラスの値を変更することです。これにより、コンポーネントは、中国の検証コードを生成するために書いたクラスを呼び出します。
<Init-Param> <説明>テキスト実装クラス</description> <param-name> kaptcha.textproducer.impl </param-name> <param-value> chineSetext </param-value> </init-param>
実装の凡例:
算術操作検証コードの実装:
上記の中国の検証コードと同じように、クラスとインターフェイスを継承して独自のクラスを実装し、その機能を書き換えてから、構成情報を変更して、コンポーネントが実装するクラスを呼び出して検証コードフォームの多様化を達成するようにする必要があります。
kaptchaservlet bytecodeファイルのコードは次のとおりです。
パブリッククラスkaptchaservletは、httpservletを実装するサーブレット{private properties props = new Properties();プライベートプロデューサーkaptchaproducer = null;プライベート文字列sessionkeyvalue = null; public void init(servletconfig conf)はservletexception {super.init(conf); Imageio.setUseCache(false); ENUMERATION <? while(initparams.hasMoreElements()){string key =(string)initparams.nextelement();文字列値= conf.getInitParameter(key); this.props.put(key、value); } config config = new config(this.props); this.kaptchaproducer = config.getProducerimpl(); this.sessionKeyValue = config.getSessionKey(); } public void doget(httpservletrequest req、httpservletresponse rep)servletexception、ioexception {resp.setdateheader( "expires"、l); resp.setheader( "Cache-Control"、 "No-Store、No-Cache、必須再生"); resp.addheader( "Cache-Control"、 "Post-Check =、pre-Check ="); resp.setheader( "pragma"、 "no-cache"); resp.setContentType( "image/jpeg");文字列captext = this.kaptchaproducer.createText(); req.getSession()。setAttribute(this.sessionKeyValue、captext); bufferedimage bi = this.kaptchaproducer.createimage(captext); servletoutputStream out = resp.getOutputStream(); Imageio.write(bi、 "jpg"、out); try {out.flush(); }最後に{out.close(); }}}次に、私が実装したkaptchaservlet.javaコードは次のとおりです。追加の検証コードを実装するために元のbytecodeファイルにロジックを追加し、比較を通じてそれを見つけることができます。
パブリッククラスのkaptchaservletは、httpservletを実装しますサーブレット{private properties props;プライベートプロデューサーのKaptchaproducer;プライベート文字列sessionkeyvalue; public kaptchaservlet(){this.props = new Properties(); this.kaptchaproducer = null; this.sessionKeyValue = null; } public void init(servletconfig conf)servletexception {super.init(conf); Imageio.setUseCache(false);列挙initparams = conf.getinitparameternames(); while(initparams.hasMoreElements()){string key =(string)initparams.nextelement();文字列値= conf.getInitParameter(key); this.props.put(key、value); } config config = new config(this.props); this.kaptchaproducer = config.getProducerimpl(); this.sessionKeyValue = config.getSessionKey(); } public void doget(httpservletrequest req、httpservletresponse rep)servletexception、ioexception {resp.setdateheader( "expires"、l); resp.setheader( "Cache-Control"、 "No-Store、No-Cache、必須再生"); resp.addheader( "Cache-Control"、 "Post-Check =、pre-Check ="); resp.setheader( "pragma"、 "no-cache"); resp.setContentType( "image/jpeg");文字列captext = this.kaptchaproducer.createText(); string s = captext.substring(、); string s = captext.substring(、); int r = integer.valueof(s).intvalue() + integer.valueof(s).intvalue(); req.getSession()。setAttribute(this.sessionKeyValue、string.valueof(r)); bufferedimage bi = this.kaptchaproducer.createimage(s+"+"+s+"=?"); servletoutputStream out = resp.getOutputStream(); Imageio.write(bi、 "jpg"、out); try {out.flush(); }最後に{out.close(); }}}また、Web.xmlの先頭にある構成を変更して、コンポーネントに実装したサーブレットを呼び出す必要があります。
<Servlet-Name> Kaptcha </servlet-name> <servlet-class> kaptchaservlet </servlet-class>
実装の凡例:
要約:
これは、検証コードの単純な実装にすぎませんが、商業プロジェクトに使用するにはまだ十分ではありません。検証コードがクラックされていない場合は、さまざまな暗号化アルゴリズムを追加する必要があります。それでも、どこでもひび割れた検証コードを検索できます。インターネットには地下データベースがあり、個人情報を保存しています。情報は1つずつ整理されていますが、これは非常にひどいです。ただし、そのようなデータベースは客観的に存在します。アカウントのパスワードを保護するための重要な部分としての検証コードは、ますます安全ではありません。個人情報が漏れているため、他の人はあなたに関する十分な情報を持っていた後、あなたに詐欺を犯すことができます。その中で、検証コードは重要な部分です。最近、卒業生が検証コードを取得するように欺かれ、彼のすべての富が数時間以内に移された事件がありました。したがって、検証コードを保護してください。他の人に簡単に開示しないでください。
もちろん、私たちはじっと座って死を待つことはありません。現在のタイプの検証コードは、クラックがますます困難になっています。音声認識や顔の認識などはすべて馴染みがあるので、あまり言いません。
ここでは、検証コードの「新しい」概念:2要素認証を紹介します。
2要素認証は、時間、イベント、キーの3つの変数に基づいて生成された1回限りのパスワードを使用して、従来の静的パスワードを置き換える1回限りのパスワードを使用するシステムです。各動的なパスワードカードには、サーバー側に同時に保存される一意のキーがあります。動的なパスワードカードとサーバーは、同じキー、同じランダムパラメーター(時間、イベント)、および同じアルゴリズムに基づいて認証された動的パスワードを計算するたびに、パスワードの一貫性を確保し、ユーザー認証を実現します。ランダムパラメーターは各認証中に異なるため、毎回生成される動的なパスワードも異なります。各計算中のパラメーターのランダム性により、各パスワードの予測不可能性が保証されるため、最も基本的なパスワード認証プロセスにより、システムのセキュリティが保証されます。パスワード詐欺によって引き起こされる大きな損失を解決し、悪意のある侵入者や人工的な損害を防ぎ、パスワードの漏れによって引き起こされる侵入の問題を解決します。
簡単に言えば、Twactor Identity認証は、あなたが知っていることとあなたが持つことができる2つの要素の組み合わせによってのみ機能することができるID認証システムです。たとえば、ATMからお金を引き出す銀行カードは、2要素認証メカニズムの例です。使用できる前に、引き出しパスワードと銀行カードの組み合わせを知る必要があります。現在、主流の2要素認証システムは、時間同期に基づいており、市場シェアが高い。 DKEYはSMSパスワード認証とSMS +トークンハイブリッド認証のサポートを増やすため、 DKEY 2要素認証システム、 RSA 2因子認証システムなど。DKEY二因子認証システムはRSAよりも競争力があります。
上記は、編集者が紹介したJava検証コードの生成の関連コンテンツです。それがあなたに役立つことを願っています!