ถัดไปบทความก่อนหน้าของการผลิตรหัสการตรวจสอบ Java (ตอนที่ 1) จะแนะนำคุณเกี่ยวกับความรู้ที่เกี่ยวข้องเกี่ยวกับรหัสการตรวจสอบ Java!
วิธีที่ 3:
นำมาใช้กับองค์ประกอบโอเพนซอร์ส JCAPTCHA รวมกับสปริงมันสามารถสร้างรหัสการตรวจสอบรูปแบบต่าง ๆ Jcaptcha เป็นรุ่น Java ของโครงการ Captcha มันเป็นโครงการโอเพ่นซอร์สที่รองรับการสร้างรหัสการตรวจสอบสำหรับกราฟิกและเวอร์ชันเสียง เมื่อสร้างรหัสการตรวจสอบสำหรับเวอร์ชันเสียงจำเป็นต้องมี Freetts ชื่อเต็มของ Captcha การทดสอบทัวริงสาธารณะอัตโนมัติอย่างสมบูรณ์เพื่อบอกคอมพิวเตอร์และมนุษย์ออกจากกันเป็นครั้งแรกที่ใช้เป็นโครงการวิจัยทางวิทยาศาสตร์ที่ Carnegie Mellon University มันถูกใช้เพื่อสร้างการทดสอบที่ง่ายสำหรับมนุษย์ที่จะผ่าน แต่ยากสำหรับคอมพิวเตอร์ที่จะผ่าน ปัจจุบันมีการใช้กันอย่างแพร่หลายในแอปพลิเคชันเครือข่ายและใช้เพื่อป้องกันไม่ให้หุ่นยนต์เผยแพร่ข้อมูลสแปม ปัจจุบันเว็บไซต์ JCAPTCHA อย่างเป็นทางการแสดงให้เห็นว่ามีเวอร์ชัน 2.0 แต่เวอร์ชันไบนารีเป็นเวอร์ชัน 1.0 สำหรับดาวน์โหลดเท่านั้น
ก่อนอื่นเราต้องเตรียมแพ็คเกจ Jar ที่เกี่ยวข้อง
ในการดำเนินการตามโครงการ JCAPTCHA มันยังอ้างอิงโครงการโอเพนซอร์สสองโครงการการสะสมคอมมอนส์และการบันทึกคอมมอนส์ นอกจากนี้การใช้งานของ JCAPTCHA เองเราต้องการแพ็คเกจทั้งหมดสามแพ็คเกจและข้อมูลเฉพาะมีดังนี้:
jcaptcha-2.0- all.jarmommons-logging-1.1.1.jarmommons-collections-3.2.jar
ประการที่สองลองดูที่ข้อมูลการกำหนดค่าคีย์ใน web.xml ด้านล่าง: นอกเหนือจากการกำหนดค่าพา ธ คลาสเฉพาะขององค์ประกอบ JCaptcha แล้ว SubmantActionServlet ยังได้รับการกำหนดค่าซึ่งใช้เป็น servlet สำหรับรหัสตรวจสอบเปรียบเทียบและทั้งคู่ถูกแมป มันสามารถเข้าใจได้ว่าเป็นการเปลี่ยนชื่อ เมื่อเรียกส่วนประกอบหรือ servlet ใน /jcaptcha.jpg และ /submit.action ตามลำดับสามารถใช้โดยตรงเพื่อใช้ชื่อการแมปนี้โดยตรง
<servlet> <servlet-name> jcaptcha </servlet-name> <servlet-class> com.octo.captcha.module.servlet.image.simpleimagecaptchaservlet </servlet-class> </servlet> <servlet> <servlet-class> com.octo.captcha.module.servlet.image.sample.submitactionservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> jcaptcha </servlet-name> <servlet-name> ส่ง </servlet-name> <url-pattern> /submit.action </url-pattern> </servlet-mapping>
web.xml
จากนั้นมาดูกันว่าการใช้งาน SubminCativeServlet ถูกนำไปใช้อย่างไร: เนื่องจากนำเข้าแพ็คเกจ JCAPTCHA Method Method SimpleImageCaptChaservlet.Validateresponse (คำขอ userCaptcharesponse) จะเรียกโดยตรงเพื่อตรวจสอบว่าข้อมูลในรหัสการตรวจสอบตรงกับการส่งโดยไม่พิจารณากระบวนการดำเนินการเฉพาะหรือไม่
ระดับสาธารณะ submentActionServlet ขยาย httpservlet {การป้องกันโมฆะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {สตริง usercaptcharesponse = request.getParameter ("japtcha"); Boolean captchapassed = simpleimagecaptchaservlet.validateresponse (คำขอ, usercaptcharesponse); if (captchapassed) response.getWriter (). เขียน ("Captcha ผ่าน"); else {response.getWriter () เขียน ("captcha ล้มเหลว"); } response.getWriter (). เขียน ("<br/> <a href = 'index.jsp'> ลองอีกครั้ง </a>"); }} submentActionServlet ในที่สุดลองมาดูที่แผนกต้อนรับส่วนหน้าง่าย:
<html> <body> <h> ตัวอย่าง captcha servlet ง่าย ๆ </h> <form action = "subment.action" method = "post"> <img src = "jcaptcha.jpg"/> <อินพุต type = "text" name = "japtcha" value = "/> <อินพุต
ตำนานการดำเนินการ:
วิธีที่ 4:
นำไปใช้กับ Kaptcha ส่วนประกอบโอเพ่นซอร์ส นอกจากนี้การใช้ Kaptcha ต้องดาวน์โหลดแพ็คเกจ Jar Component Kaptcha เป็นเครื่องมือสร้างรหัสการตรวจสอบที่ใช้งานได้จริง ด้วยมันคุณสามารถสร้างรหัสการตรวจสอบในรูปแบบต่าง ๆ เพราะสามารถกำหนดค่าได้ หลักการของ Kaptcha Works คือการโทรหา com.google.code.kaptcha.servlet.kaptchaservlet (จะเห็นได้ว่าเป็นโครงการโอเพ่นซอร์สของ Google) เพื่อสร้างภาพ ในเวลาเดียวกันให้ใส่สตริงรหัสตรวจสอบที่สร้างขึ้นลงใน HTTPSESSION
ใช้ kaptcha เพื่อกำหนดค่าให้สะดวก:
รหัสการตรวจสอบขนาดตัวอักษรรหัสการตรวจสอบขนาดตัวอักษรการตรวจสอบรหัสฟอนต์สีการตรวจสอบสีเนื้อหาช่วงเนื้อหา (จำนวน, ตัวอักษร, อักขระจีน!) รหัสการตรวจสอบขนาดภาพ, เส้นขอบ, ความหนาของเส้นขอบ, เส้นการตรวจสอบสีชายแดน (คุณสามารถสืบทอด com.google.code.kaptca.noiseproducer com.google.code.kaptcha.gimpyengine สไตล์ที่กำหนดเอง)
-
ข้อมูลการกำหนดค่าสำหรับ Kaptcha ยังถูกวางไว้ใน web.xml: ข้อมูลการกำหนดค่าที่เริ่มต้นในแท็ก <int-param>
<servlet> <servlet-name> kaptcha </servlet-name> <servlet-lass> com.google.code.kaptcha.servlet.kaptchaservlet </servlet-lass> <init-param> <scription> เส้นขอบภาพ, ค่าทางกฎหมาย: ใช่ </คำอธิบาย> </init-param> <init-Param> <secutions> สีชายแดนค่าทางกฎหมาย: R, G, B (และอัลฟ่าเสริม) หรือสีขาว, ดำ, สีน้ำเงิน </คำอธิบาย> <param-name> kaptcha.border.color </param-name> <param-value> สีดำ </param-value> </init-param> <init-param> <init-Param> <secutional> ความหนาของเส้นขอบ, ค่าทางกฎหมาย:>/คำอธิบาย> <param-name> </init-param> <init-Param> <init-Param> <secutional> ความกว้างของภาพ </คำอธิบาย> <param-name> kaptcha.image.width </param-name> <param-value> </param-value> </init-param> <param-value> </param-value> </init-param> <init-Param> <scription> คลาสการใช้งานภาพ </คำอธิบาย> <param-name> kaptcha.producer.impl </param-name> คลาสการใช้งาน </คำอธิบาย> <param-name> kaptcha.textproducer.impl </param-name> <param-value> com.google.code.kaptcha.text.impl.defaultTextcreator </param-value> <param-name> kaptcha.textproducer.char.string </param-name> <param-value> </param-value> <!-<param-value> abcdegfynmnpwx </param-value>-> <! <Secution> ความยาวรหัสการตรวจสอบ </คำอธิบาย> <param-name> kaptcha.textproducer.char.length </param-name> <param-value> </param-value> </init-param> <init-Param> Courier </param-value> </itr-param> <init-Param> <scription> ขนาดตัวอักษร px. </คำอธิบาย> <param-name> kaptcha.textproducer.font.size </param-name> <param-value> </คำอธิบาย> <param-name> kaptcha.textproducer.font.color </param-name> <param-value> สีดำ </param-value> </init-param> <init-Param> <sention> ช่วงเวลาข้อความ </คำอธิบาย> <param-name> kaptcha.textproducer </init-param> <init-Param> <scription> คลาสการใช้งานสัญญาณรบกวน </คำอธิบาย> <param-name> kaptcha.noise.impl </param-name> <param-value> <!-com.google.code.kaptcha.impl.nonoise <int-Param> <scription> สีรบกวนค่าทางกฎหมาย: R, G, B หรือสีขาว, ดำ, สีน้ำเงิน </คำอธิบาย> <param-name> kaptcha.noise.color </param-name> <param-value> สีดำ </param-value> </init-param> <init-param> <scription> สไตล์ภาพ: น้ำ-com.google.code.kaptcha.impl.ateripple shadowcom.google.code.kaptcha.impl.shadowgimpy </คำอธิบาย> <param-name> kaptcha.obscurificator.impl </param-name> <param-value> com.google.code.kaptcha.impl.wateripple </param-value> <param-name> kaptcha.background.impl </param-name> <param-value> com.google.code.kaptcha.impl.defaultbackground </param-value> </init-param> <init-param> <scription> <param-value> สีเขียว </param-value> </itrin-Param> <init-Param> <scription> การไล่ระดับสีพื้นหลัง, สีจบ </คำอธิบาย> <param-name> kaptcha.background.clear.to </param-name> <param-value> สีขาว </param-value> <param-name> kaptcha.word.impl </param-name> <param-value> com.google.code.kaptcha.text.impl.defaultwordRenderer </param-value> </init-param> <init-param> <param-value> kaptcha_session_key </param-value> </itrient-Param> <init-Param> <scription> วันที่ที่ Kaptcha ถูกสร้างขึ้นจะถูกใส่ลงใน httpsession นี่คือค่าคีย์สำหรับรายการนั้นในเซสชัน </คำอธิบาย> <param-name> kaptcha.session.date </param-name> <param-value> kaptcha_session_date </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>
การโทรด้านหน้า: เส้นทางของภาพรหัสการตรวจสอบถูกแมปด้วย andomcode.jpg และเหตุการณ์คลิก onclick () เรียกใช้ฟังก์ชัน JS ในเวลาเดียวกันในฟังก์ชั่น JS ใช้เวลาปัจจุบันเพื่อทำให้แคชเบราว์เซอร์ทำให้ภาพรหัสการตรวจสอบเป็นโมฆะ
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-"> <title> anwerCode </title> <script type = "text/javascript"> function changer (node) {// ใช้เพื่อสร้างรหัสการตรวจสอบที่แตกต่างกัน วันที่ (). getTime (); } </script> </head> <body> <img src = "onadercode.jpg" onclick = "ตัวเปลี่ยน (นี่)" style = "เคอร์เซอร์: ตัวชี้;"> <form action = "check.jsp"> <อินพุตประเภท = "text" name = "r"> <check.jsp: รับข้อมูลสตริงในรูปภาพการตรวจสอบรหัสผ่าน (String) session.getAttribute (com.google.code.kaptcha.constants.kaptcha_session_key);
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-"> <title> ตรวจสอบ </title> </head> <body> <% // ตรวจสอบว่าเป็นรหัสการตรวจสอบที่ถูกต้อง string str = request.getParameter ("r"); if (k.equals (str)) out.print ("true"); out.print (k + "---" + str); %> </body> </html>ตำนานการดำเนินการ:
เราสามารถพบว่ารหัสการตรวจสอบของเรามีสีสันมากขึ้นเรื่อย ๆ แต่เรายังอยู่ในขั้นตอนของการตรวจสอบเฉพาะจดหมายและตัวเลขภาษาอังกฤษเท่านั้น ดังนั้นเรายังสามารถเล่นเกมระดับไฮเอนด์ได้หรือไม่? คำตอบคือใช่ จากนั้นมาดูวิธีการใช้รหัสการตรวจสอบภาษาจีนและรหัสการตรวจสอบทางคณิตศาสตร์ พวกเขาทั้งหมดจะต้องได้รับการแก้ไขตามการใช้ Kaptcha ข้างต้น
การดำเนินการตามรหัสการตรวจสอบภาษาจีน:
ก่อนอื่นเราจะพบไฟล์ defaultTextCreator.class bytecode ภายใต้แพ็คเกจ kaptcha.jar ตามชื่อที่แนะนำมันเป็นคลาสที่จะสร้างข้อความในรหัสการตรวจสอบ เราสามารถใช้คลาสที่สืบทอดมาจากตัวเราเองและใช้คลาสการใช้งานของเราเองเพื่อสร้างข้อความในรหัสการตรวจสอบภาษาจีนผ่านการกำหนดค่า หลังจากการสลายตัวต่อไปนี้เราจะเห็นว่ามันถูกนำไปใช้ในลักษณะนั้น ฟังก์ชั่น getText () ใช้เพื่อสร้างข้อความการตรวจสอบรหัสที่ตัวกำหนดค่า getConfig () จะแสดงผลดังนั้นเราจึงต้องสืบทอดคลาสการกำหนดค่าและใช้อินเทอร์เฟซการสร้างข้อความและเขียนทับวิธี getText ()
คลาสสาธารณะ defaultTextCreator ขยายการใช้งานที่กำหนดค่าได้ textProducer {สตริงสาธารณะ getText () {int length = getConfig (). getTextProducerHarlength (); char [] chars = getConfig (). getTextProducerCharString (); int randomContext = chars.length -; สุ่มแรนด์ = ใหม่สุ่ม (); StringBuffer text = new StringBuffer (); สำหรับ (int i =; i <length; i ++) {text.append (chars [(rand.nextint (randomContext)+)]); } return text.toString (); -ต่อไปนี้คือการใช้งานเฉพาะของ chinesetext.java: โปรแกรมจะดำเนินการเฉพาะรหัสใน getText () รหัสต้นฉบับเขียนใน getText1 () และไม่ดำเนินการ คุณสามารถทำการเปรียบเทียบ
คลาสสาธารณะ Chinesetext ขยายการดำเนินการที่กำหนดค่าได้ textProducer {สตริงสาธารณะ getText () {int length = getConfig (). getTextProducerHarlength (); // char [] chars = getConfig (). getTextProducerCharString (); สตริง [] s = สตริงใหม่ [] {"ฉัน", "รัก", "แท็บ", "Trow" และ "," ขาย "," สกรู "," ปุ่ม "}; สุ่มแรนด์ = นิวสุ่ม (); สตริงบัฟเฟอร์ sb = สตริงใหม่ (); sb.toString (); "", "," A "," B "," C "," D "," E "," F "}; สุ่มแรนด์ = ใหม่สุ่ม (); สำหรับ (int i =; i <length; i ++) {switch (rand.nextint (array.length)) {case: tempint = rand.nextint ()+; คำแรก = string.valueof ((ถ่าน) เทมพินต์); หยุดพัก; กรณี: int r, r, r, r; String strh, strl; // สูง & ต่ำ r = rand.nextint () +; // ปิดด้านหน้าและเปิด [,) ถ้า (r ==) {r = rand.nextint (); } else {r = rand.nextint (); } r = rand.nextint () +; if (r ==) {r = rand.nextint () +; } อื่นถ้า (r ==) {r = rand.nextint (); } else {r = rand.nextint (); } strh = array [r] + array [r]; strl = array [r] + อาร์เรย์ [r]; ไบต์ [] ไบต์ = ไบต์ใหม่ []; Bytes [] = (byte) (integer.parseint (strh,)); Bytes [] = (byte) (integer.parseint (strl,)); คำแรก = สตริงใหม่ (ไบต์); หยุดพัก; ค่าเริ่มต้น: tempint = rand.nextint () +; คำแรก = string.valueof ((ถ่าน) เทมพินต์); หยุดพัก; } คำสุดท้าย += คำแรก; } ส่งคืนคำสุดท้าย; -ขั้นตอนสุดท้ายคือการเปลี่ยนค่าของคลาสการใช้งานข้อความใน web.xml เพื่อให้องค์ประกอบเรียกคลาสที่เขียนเพื่อสร้างรหัสการตรวจสอบภาษาจีน
<int-Param> <sention> คลาสการใช้งานข้อความ </คำอธิบาย> <param-name> kaptcha.textproducer.impl </param-name> <param-value> chinesetext </param-value> </itrin-Param>
ตำนานการดำเนินการ:
การใช้รหัสการตรวจสอบการดำเนินการทางคณิตศาสตร์:
เช่นเดียวกับรหัสการตรวจสอบภาษาจีนข้างต้นเราจำเป็นต้องใช้คลาสของเราเองโดยการสืบทอดคลาสและอินเทอร์เฟซและเขียนฟังก์ชั่นในนั้นใหม่จากนั้นเปลี่ยนข้อมูลการกำหนดค่าเพื่อให้ส่วนประกอบเรียกคลาสที่พวกเขาใช้เพื่อให้เกิดการกระจายรหัสการตรวจสอบ
รหัสของไฟล์ bytecode kaptchaservlet มีดังนี้:
คลาสสาธารณะ KaptChaservlet ขยาย Httpservlet ใช้ servlet {อุปกรณ์ประกอบคุณสมบัติส่วนตัว = คุณสมบัติใหม่ (); ผู้ผลิตส่วนตัว kaptchaproducer = null; สตริงส่วนตัวเซสชัน keyValue = null; Public Void Init (ServletConfig Conf) โยน servletexception {super.init (conf); imageio.setUsecache (เท็จ); การแจงนับ <?> initParams = conf.getInitParameternames (); ในขณะที่ (initParams.hasmoreElements ()) {String key = (String) initParams.nextElement (); ค่าสตริง = conf.getInitParameter (คีย์); this.props.put (คีย์, ค่า); } config = config ใหม่ (this.props); this.kaptChaproducer = config.getProducerImpl (); this.sessionKeyValue = config.getSessionKey (); } โมฆะสาธารณะ DOGET (HTTPSERVLETREQUEST REQ, HTTPSERVLETRESSESSESS RESP) พ่น ServleTexception, iOException {resp.setDateHeader ("หมดอายุ", l); resp.setheader ("แคชควบคุม", "ไม่มีร้านค้าไม่มีแคชต้องตรวจสอบ"); 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.flush (); } ในที่สุด {out.close (); -จากนั้นรหัส kaptchaservlet.java ที่ฉันนำมาใช้ด้วยตัวเองมีดังนี้: เพิ่มตรรกะลงในไฟล์ bytecode ดั้งเดิมเพื่อใช้รหัสการตรวจสอบเพิ่มเติมและคุณสามารถค้นพบผ่านการเปรียบเทียบ
คลาสสาธารณะ Kaptchaservlet ขยาย httpservlet ใช้ servlet {อุปกรณ์ประกอบคุณสมบัติส่วนตัว; ผู้ผลิตเอกชน Kaptchaproducer; สตริงส่วนตัว sessionKeyValue; Public KaptChaservlet () {this.props = คุณสมบัติใหม่ (); this.kaptchaproducer = null; this.sessionKeyValue = null; } โมฆะสาธารณะ init (servletconfig conf) พ่น servletexception {super.init (conf); imageio.setUsecache (เท็จ); การแจงนับ initParams = conf.getInitParameterNames (); ในขณะที่ (initParams.hasmoreElements ()) {String key = (String) initParams.nextElement (); ค่าสตริง = conf.getInitParameter (คีย์); this.props.put (คีย์, ค่า); } config = config ใหม่ (this.props); this.kaptChaproducer = config.getProducerImpl (); this.sessionKeyValue = config.getSessionKey (); } โมฆะสาธารณะ DOGET (HTTPSERVLETREQUEST REQ, HTTPSERVLETRESSESSESS RESP) พ่น ServleTexception, iOException {resp.setDateHeader ("หมดอายุ", l); resp.setheader ("แคชควบคุม", "ไม่มีร้านค้าไม่มีแคชต้องตรวจสอบ"); resp.addheader ("cache-control", "post-check =, pre-check ="); resp.setheader ("pragma", "no-cache"); resp.setContentType ("image/jpeg"); สตริง captext = this.kaptchaproducer.createText (); สตริง s = captext.substring (,); สตริง 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.flush (); } ในที่สุด {out.close (); -นอกจากนี้เรายังต้องเปลี่ยนการกำหนดค่าที่จุดเริ่มต้นของ web.xml เพื่อให้การเรียกส่วนประกอบเรียก servlet ที่คุณใช้:
<servlet-name> kaptcha </servlet-name> <servlet-class> kaptchaservlet </servlet-class>
ตำนานการดำเนินการ:
สรุป:
นี่เป็นเพียงการใช้งานรหัสการตรวจสอบอย่างง่าย แต่ก็ยังห่างไกลพอที่จะใช้สำหรับโครงการเชิงพาณิชย์ หากรหัสการตรวจสอบไม่แตกต้องมีการเพิ่มอัลกอริทึมการเข้ารหัสต่างๆ ถึงกระนั้นคุณสามารถค้นหารหัสการตรวจสอบที่แตกได้ทุกที่ มีฐานข้อมูลใต้ดินบนอินเทอร์เน็ตซึ่งเก็บข้อมูลส่วนบุคคลของเรา ข้อมูลถูกแยกออกทีละคนซึ่งแย่มาก อย่างไรก็ตามฐานข้อมูลดังกล่าวมีอยู่อย่างเป็นกลาง รหัสการตรวจสอบซึ่งเป็นส่วนสำคัญของการปกป้องรหัสผ่านบัญชีได้กลายเป็นไม่ปลอดภัยมากขึ้นเรื่อย ๆ เนื่องจากการรั่วไหลของข้อมูลส่วนบุคคลคนอื่น ๆ สามารถทำการฉ้อโกงกับคุณได้หลังจากที่พวกเขามีข้อมูลเพียงพอกับคุณ ในหมู่พวกเขารหัสการตรวจสอบเป็นส่วนสำคัญ เมื่อเร็ว ๆ นี้เหตุการณ์ที่ผู้สำเร็จการศึกษาถูกหลอกให้ได้รับรหัสการตรวจสอบและความมั่งคั่งทั้งหมดของเขาถูกถ่ายโอนภายในไม่กี่ชั่วโมง ดังนั้นโปรดปกป้องรหัสการยืนยันของคุณและอย่าเปิดเผยต่อผู้อื่นได้อย่างง่ายดาย
แน่นอนเราจะไม่นั่งนิ่ง ๆ และรอความตาย ประเภทของรหัสการตรวจสอบปัจจุบันกำลังแตกมากขึ้นเรื่อย ๆ เช่นการจดจำเสียงและการจดจำใบหน้าล้วนเป็นที่คุ้นเคยดังนั้นฉันจะไม่พูดอะไรมากมาย
ที่นี่เราแนะนำแนวคิด "ใหม่" ของรหัสการตรวจสอบ: การตรวจสอบสองปัจจัย
การรับรองความถูกต้องแบบสองปัจจัยเป็นระบบที่ใช้เทคโนโลยีการซิงโครไนซ์เวลาซึ่งใช้รหัสผ่านครั้งเดียวที่สร้างขึ้นตามตัวแปรสามตัวของเวลาเหตุการณ์และกุญแจเพื่อแทนที่รหัสผ่านแบบคงที่แบบดั้งเดิม การ์ดรหัสผ่านแบบไดนามิกแต่ละใบมีคีย์ที่ไม่ซ้ำกันซึ่งเก็บไว้ในฝั่งเซิร์ฟเวอร์ในเวลาเดียวกัน ทุกครั้งที่การ์ดรหัสผ่านแบบไดนามิกและเซิร์ฟเวอร์คำนวณรหัสผ่านแบบไดนามิกที่ได้รับการรับรองความถูกต้องตามคีย์เดียวกันพารามิเตอร์สุ่มเดียวกัน (เวลาเหตุการณ์) และอัลกอริทึมเดียวกันจึงทำให้มั่นใจได้ถึงความสอดคล้องของรหัสผ่านและตระหนักถึงการรับรองความถูกต้องของผู้ใช้ เนื่องจากพารามิเตอร์แบบสุ่มแตกต่างกันในระหว่างการตรวจสอบแต่ละครั้งรหัสผ่านแบบไดนามิกที่สร้างขึ้นในแต่ละครั้งจึงแตกต่างกันเช่นกัน เนื่องจากการสุ่มของพารามิเตอร์ในระหว่างการคำนวณแต่ละครั้งทำให้มั่นใจได้ถึงความคาดเดาไม่ได้ของแต่ละรหัสผ่านกระบวนการตรวจสอบรหัสผ่านพื้นฐานที่สุดจะช่วยให้มั่นใจได้ถึงความปลอดภัยของระบบ แก้ปัญหาการสูญเสียครั้งใหญ่ที่เกิดจากการฉ้อโกงรหัสผ่านป้องกันผู้บุกรุกที่เป็นอันตรายหรือความเสียหายเทียมและแก้ปัญหาการบุกรุกที่เกิดจากการรั่วไหลของรหัสผ่าน
พูดง่ายๆคือการตรวจสอบตัวตนสองปัจจัยเป็นระบบตรวจสอบตัวตนที่สามารถทำงานผ่านการรวมกันของสิ่งที่คุณรู้และองค์ประกอบทั้งสองที่คุณมี ตัวอย่างเช่นบัตรธนาคารที่ถอนเงินออกจากตู้เอทีเอ็มเป็นตัวอย่างของกลไกการตรวจสอบความถูกต้องแบบสองปัจจัย คุณต้องทราบการรวมรหัสผ่านการถอนและบัตรธนาคารก่อนที่คุณจะใช้งานได้ ปัจจุบันระบบตรวจสอบความถูกต้องสองปัจจัยหลักขึ้นอยู่กับการซิงโครไนซ์เวลาและมีส่วนแบ่งการตลาดสูง ระบบตรวจสอบความถูกต้องแบบสองปัจจัย DKEY ระบบตรวจสอบความถูกต้องแบบสองปัจจัย RSA ฯลฯ เนื่องจาก DKEY เพิ่มการสนับสนุนการตรวจสอบรหัสผ่าน SMS และการตรวจสอบความถูกต้องของ Token Hybrid Hybrid
ข้างต้นเป็นเนื้อหาที่เกี่ยวข้องของการผลิตรหัสการตรวจสอบ Java ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ!