Далее, предыдущая статья производства кода проверки Java (часть 1) представит вас соответствующим знаниям о коде проверки Java!
Метод 3:
Реализованный с помощью компонента с открытым исходным кодом JCaptcha, в сочетании с пружиной, он может генерировать различные формы кодов проверки. Jcaptcha - Java -версия Project Captcha. Это проект с открытым исходным кодом, который поддерживает генерацию кодов проверки для графики и звуковых версий. При создании кодов проверки для звуковых версий требуется Freetts. Полное имя Captcha полностью автоматизировано общественное тест Тьюринга, чтобы рассказать компьютерам и людям, которые были впервые использованы в качестве научного исследовательского проекта в Университете Карнеги -Меллона. Он использовался для создания теста, который легко пройти, но компьютеры трудно пройти. В настоящее время он широко используется в сетевых приложениях и используется для предотвращения публикации информации о спаме. В настоящее время официальный веб -сайт JCaptcha показывает, что есть версия 2.0, но двоичная версия - только версия 1.0 для загрузки.
Сначала нам нужно подготовить соответствующий пакет JAR
В реализации проекта JCAPTCHA он также ссылается на два проекта с открытым исходным кодом, коллекции Commons и общежитие. Кроме того, реализация самой JCaptcha, нам нужны три пакета, и конкретная информация заключается в следующем:
jcaptcha-2.0-all.jarcommons-logging-1.1.1.jarcommons-Collections-3.2.jar
Во -вторых, давайте рассмотрим информацию о конфигурации ключей в Web.xml ниже: в дополнение к настройке конкретного пути класса компонента JCaptcha, также настроен OpericActionServlet, который используется в качестве сервлета для кодов проверки сравнения, и оба отображаются. Это можно понимать как изменение названия. При вызове компонента или сервлета в /JCaptcha.jpg и /submit.Action соответственно его можно использовать непосредственно для использования этого имени отображения.
<servlet> <vervlet-name> jcaptcha </servlet-name> <verlet-class> com.octo.captcha.module.servlet.image.simpleimagecaptchaservlet </servlet-class> </servlet> <servlet> <servlet-mame> отправить </servlet> <Servlet-class> com.octo.captcha.module.servlet.image.sample.submitactionservlet </servlet> </servlet> <servlet-mapping> <servlet-name> jcaptcha </servlet-name> </url-pattern> /jcaptcha. <Servlet-name> отправить </servlet-name> <url-pattern> /submit.action </url-pattern> </servlet-mapping>
web.xml
Затем давайте посмотрим, как реализован RequipActionSVLET: поскольку пакет компонентов JCAPTCHA импортируется, инкапсулированный метод SimpleImageCaptChaServlet.validaterSponse (запрос, UserCaptChresponse) вызывает напрямую, чтобы определить, соответствует ли информация в коде проверки представление, без учета конкретного процесса реализации.
public Class RequistActionServlet Extens httpservlet {protected void dopost (httpservlectrequest, httpservletresponse response) Throws ServletException, ioException {string usercaptAresponse = request.getParameter ("japtcha"); Boolean CaptChapassed = simpleImageCaptChaservlet.validaterSponse (запрос, USERCAPTHARSONSE); if (captchassed) response.getwriter (). write ("Captcha прошел"); else {response.getWriter (). write ("captcha не удалось"); } response.getWriter (). write ("<br/> <a href = 'index.jsp'> попробуйте еще раз </a>"); }} Отправка Наконец, давайте посмотрим на простой звонок на стойку регистрации:
<html> <body> <h> Simple Captcha Servlet Servlet </h> <form action = "post.action" method = "post"> <img src = "jcaptcha.jpg"/> <input type = "text" name = "japtcha" value = ""/> <input = "pospe"/> </form> </body> </html>
Легенда реализации:
Метод 4:
Реализовано с компонентом с открытым исходным кодом Kaptcha. Также использование Kaptcha требует загрузки пакета компонентов JAR. Kaptcha - это очень практичный инструмент генерации кода проверки. С помощью этого вы можете генерировать коды проверки различных стилей, потому что он настраивается. Принцип работы Kaptcha состоит в том, чтобы вызвать com.google.code.kaptcha.servlet.kaptchaservlet (видно, что это проект Google с открытым исходным кодом) для создания изображения. В то же время поместите сгенерированную строку кода проверки в Httpsession.
Используйте Kaptcha, чтобы удобно настроить его:
Код проверки шрифта шрифта код проверки шрифта. Размер кода проверки шрифта. com.google.code.kaptcha.gimpyengine Custom Style)
...
Информация о конфигурации для Kaptcha также размещена в web.xml: инициализированная информация о конфигурации в теге <init-param>.
<servlet> <vervlet-name> kaptcha </servlet-name> <servlet-class> com.google.code.kaptcha.servlet.kaptchaservlet </servlet-class> <init-param> <distice> граница изображения, законное значение: да, нет </description> <param-anme> kaptcha <Inic-param> <SOMNAD> Цвет границы, юридическая ценность: r, g, b (и дополнительная альфа) или белая, черная, синяя. </description> <param-name> kaptcha.border.color </param-name> <param-value> black </param-value> </init-param> <init-param> <init-param> <distice> Толщина границы, законное значение:>/description> <param-name> kaptcha. <init-param> <init-param> <description>Image width</description> <param-name>kaptcha.image.width</param-name> <param-value></param-value> </init-param> <init-param> <description>Image high</description> <param-name>kaptcha.image.height</param-name> <param-value></param-value> </init-param> <init-param> <description>Image implementation class</description> <param-name>kaptcha.producer.impl</param-name> <param-value> com.google.code.kaptcha.impl.DefaultKaptcha </param-value> </init-param> <init-param> <description>Text implementation class</description> <param-name> kaptcha.textproducer.impl </param-name> <param-value> com.google.code.kaptcha.text.impl.defaulttextcreator </param-value> </init-param> <init-param> <doundtectlectrecrecretor, значения кода версионого кода получается из этой коллекции </Описание> <param-name> kaptcha.textproducer.char.string </param-name> <value> </param-value> <!-<param-value> abcdegfynmnpwx </param-value>-> <!-<param-value> mooch.com. Длина </description> <param-name> kaptcha.textproducer.char.length </param-name> <param-value> </param-value> </init-param> <init-param> <distice> font arial, courier </descripement> <param-name> kaptcha.textproducer.font.name </param-name> <param-value, captcha. </init-param> <init-param> <distice> Размер шрифта px. </description> <param-mame> kaptcha.textproducer.font.size </param-name> <param-value> </param-value> </init-param> <init-param> <Описание> Цвет шрифта, законное значение: r, g или white, черный, bl. </description> <param-name>kaptcha.textproducer.font.color</param-name> <param-value>black</param-value> </init-param> <init-param> <description>Text interval</description> <param-name>kaptcha.textproducer.char.space</param-name> <param-value></param-value> </init-param> <Init-param> <distice> Класс реализации интерференций </description> <param-name> kaptcha.noise.impl </param-name> <value> <!-com.google.code.kaptcha.impl.nonoise-> com.google.code.kaptcha.impl.default inecure-prence> </init-pram> <pet> <tint-pram> <pit> </init-par Цвет, юридическая ценность: r, g, b или белый, черный, синий. </description> <param-name> kaptcha.noise.color </param-name> <param-value> black </param-value> </init-param> <init-param> <distice> Стиль изображения: water-watch-com.google.code.kaptcha.impl.waterripple fisheyecom.google.captcha.implyegymip Shadowcom.google.code.kaptcha.impl.ShadowGimpy </description> <param-name>kaptcha.obscurificator.impl</param-name> <param-value> com.google.code.kaptcha.impl.WaterRipple </param-value> </init-param> <init-param> <description>Background implementation class</description> <param-name> kaptcha.background.impl </param-name> <param-value> com.google.code.kaptcha.impl.defaultbackground </param-value> </init-param> <init-param> <distice> Цветовой градиент фона, начальный цвет </description> <param-name> kaptcha.facgle.from. <param-value> green </param-value> </init-param> <init-param> <distice> градиент цвета фонового цвета, конечный цвет </description> <param-name> kaptcha.background.clear.to </param-name> </param-value> белый </param-value> </init-param> <int-param> <secipposing> text-verderer </description> </init-param> <int-param> <distice> text rederer </description> <param-name> kaptcha.word.impl </param-name> <param-value> com.google.code.kaptcha.text.impl.defaultwordrenderer </param-value> </init-param> <init-param> <distice> Ключ, который хранит код версии в сеансе </description> <param-name> kaptcha.sesession. <param-value> kaptcha_session_key </param-value> </init-param> <init-param> <distice> Дата сгенерированного капчи вводится в Httpsession. Это значение ключа для этого элемента в сеансе. </description> <param-name> kaptcha.session.date </param-name> <value> kaptcha_session_date </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name> kaptcha </servlet-name> <url-pattern> /randomcode.jpglemating> </url-pattern> /randomcode.jpglempation> <url-pattern> /randomcode.jpleting> <url-pattern> /randomcode.jpletsing> </url-pattern> /randomcode.jpleting> </url-pattern> /randomcode.
Передний вызов: Путь изображения кода проверки отображается с randomcode.jpg, а событие Click Onclick () вызывает функцию JS. В то же время в функции JS используется текущее время для аннулирования кэша браузера, чтобы обновить изображение кода проверки.
<html> <Head> <meta http-equiv = "content-type" content = "text/html; charset = utf-"> <title> randomcode </title> <script type = "text/javascript"> function Changer (node) {// используется для генерации различных кодов Verification при щелчке node.src = "randomCode. Date (). GetTime (); } </script> </head> <body> <img src = "randomcode.jpg" onclick = "changer (this)" style = "cursor: pointer;"> <form action = "check.jsp"> <input type = "text" name = "r"> <inpute = "value =" s "> </form> </body> </html> </html> </html> </html> </html> </html> </html> </html> </html> </html> </html> </html>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> <% // Проверьте, является ли это правильной проверки кода k = (строка). String str = request.getParameter ("r"); if (k.equals (str)) out.print ("true"); out.print (k + "---" + str); %> </body> </html>Легенда реализации:
Мы можем обнаружить, что наши коды проверки становятся все более и более красочными, но мы все еще находимся на стадии проверки только английских букв и цифр. Так можем ли мы все еще играть в каких-то высококачественных? Ответ да. Затем давайте посмотрим, как реализовать китайские коды проверки и коды арифметической проверки. Все они должны быть изменены только на основе вышеуказанного использования капчи.
Реализация китайского кода проверки:
Сначала мы находим файл defaulttextcreator.class Bytecode в пакете kaptcha.jar. Как следует из названия, это класс для генерации текста в коде проверки. Мы можем реализовать класс, унаследованный от него самими и использовать наш собственный класс реализации, чтобы сделать текст в коде проверки китайского языка посредством конфигурации. После следующего декомпиляции мы видим, что он реализован таким образом. Функция getText () используется для генерации текста кода проверки, который будет отображать конфигуратор getConfig (), поэтому нам нужно только унаследовать класс конфигурации и реализовать интерфейс генерации текста и перезаписать метод getText ().
открытый класс defaultTextCreator Extends настраиваемые реализации TextProducer {public String getText () {int length = getConfig (). getTextProducerCherlength (); 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)+)]); } return text.toString (); }}Ниже приведена конкретная реализация Chinesetext.java: Программа выполняет только код в getText (). Оригинальный код записан в getText1 () и не выполняет его. Вы можете сделать сравнение.
public Class Chinesetext Extends настраиваемые реализации TextProducer {public String getText () {int length = getConfig (). getTextProducerCherlength (); // char [] chars = getConfig (). getTextProducerCherString (); String [] s = new String [] {"i", "love", "tab", "trow" и "," sell "," inc "," button "}; случайный rand = new random (); stringbuffer sb = new StringBuffer (); для (int i =; i <length; i ++) {ind ind = rand.nextint (s.length); sb. SB.ToString (); "," a "," b "," c "," d "," e "," f "}; Случайный rand = new Random (); for (int i =; i <length; i ++) {switch (rand.nextint (array.length)) {case: tepant = rand.nextint ()+; FirstWord = string.valueof ((char) ETMENT); перерыв; Дело: 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] + массив [r]; strl = массив [r] + массив [r]; byte [] bytes = new Byte []; байты [] = (byte) (integer.parseint (strh,)); байты [] = (byte) (integer.parseint (strl,)); FirstWord = New String (Bytes); перерыв; по умолчанию: tepant = rand.nextint () +; FirstWord = string.valueof ((char) ETMENT); перерыв; } finalWord += FirstWord; } вернуть FinalWord; }}Последним шагом является изменение значения класса реализации текста в web.xml, чтобы компонент вызывает класс, который он записывает, для генерации китайского кода проверки.
<Intic-param> <socription> Класс реализации текста </description> <param-name> kaptcha.textproducer.impl </param-name> <param-value> chinesetext </param-value> </init-param>
Легенда реализации:
Внедрение кода проверки арифметической операции:
Так же, как приведенный выше китайский код проверки, нам необходимо внедрить наш собственный класс, унаследовав классы и интерфейсы, и переписать функции в нем, а затем изменить информацию о конфигурации, чтобы компоненты вызывали классы, которые они реализуют для достижения диверсификации формы кода проверки.
Код файла байткода Kaptchaservlet заключается в следующем:
Public Class KaptChaservlet расширяет httpservlet реализует Сервлет {частные свойства props = new Properties (); Частный продюсер kaptchaproducer = null; Private String SessionKeyValue = null; public void init (ServletConfig conf) Throws ServletException {super.init (conf); Imageio.setusecache (false); Enumeration <?> Initparams = conf.getinitparameternames (); while (initparams.hasmoreElements ()) {string key = (string) initparams.nextelement (); String value = conf.getinitparameter (key); this.props.put (ключ, значение); } Config = new config (this.props); this.kaptchaproducer = config.getProducerimpl (); this.sessionKeyValue = config.getSessionKey (); } public void Doget (httpservletrequest req, httpservletresponse resp), бросает ServletException, ioException {resp.setDateHeader («истекает», L); Resp.setheader («Контроль кеша», «без магазина, без качания, обязательно-ревалидат»); Resp.AddHeader ("Контроль кэша", "после проверки =, pre-check ="); Resp.setheader («Pragma», «без кача»); Resp.SetContentType ("Image/JPEG"); String 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 реализует Сервлет {частные свойства реквизит; частный продюсер Капчапродусер; частная строка SessionKeyValue; public kaptchaservlet () {this.props = new Properties (); this.kaptchaproducer = null; this.sessionKeyValue = null; } public void init (ServletConfig conf) Throws ServletException {super.init (conf); Imageio.setusecache (false); Enumeration initparams = conf.getinitparameternames (); while (initparams.hasmoreElements ()) {string key = (string) initparams.nextelement (); String value = conf.getinitparameter (key); this.props.put (ключ, значение); } Config = new config (this.props); this.kaptchaproducer = config.getProducerimpl (); this.sessionKeyValue = config.getSessionKey (); } public void Doget (httpservletrequest req, httpservletresponse resp), бросает ServletException, ioException {resp.setDateHeader («истекает», L); Resp.setheader («Контроль кеша», «без магазина, без качания, обязательно-ревалидат»); Resp.AddHeader ("Контроль кэша", "после проверки =, pre-check ="); Resp.setheader («Pragma», «без кача»); Resp.SetContentType ("Image/JPEG"); String 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>
Легенда реализации:
Суммировать:
Это просто простая реализация кода проверки, но он все еще далек от того, чтобы использовать его для коммерческих проектов. Если код проверки не потрескается, должны быть добавлены различные алгоритмы шифрования. Несмотря на это, вы можете искать треснутый код проверки везде. В Интернете есть подземная база данных, которая хранит нашу личную информацию. Информация отсортирована один за другим, что очень ужасно. Однако такая база данных существует объективно. Коды проверки, как важная часть защиты паролей учетной записи, становятся все более небезопасными. Из -за утечки личной информации другие могут совершить мошенничество на вас после того, как у них будет достаточно информации о вас. Среди них коды проверки являются важной частью. Недавно был обманут выпускник, чтобы получить коды проверки, и все его богатство было передано в течение нескольких часов. Поэтому, пожалуйста, защитите свой код проверки и не легко раскрывайте его другим.
Конечно, мы не будем сидеть на месте и ждать смерти. Текущие типы кодов проверки становятся все труднее взломать. Такие, как распознавание голоса и распознавание лица - все это знакомы, поэтому я не буду много говорить.
Здесь мы представляем «новую» концепцию кода проверки: двухфакторная аутентификация.
Двухфакторная аутентификация-это система, которая использует технологию синхронизации времени, которая использует одноразовый пароль, сгенерированный на основе трех переменных времени, события и ключа для замены традиционного статического пароля. Каждая карта динамического пароля имеет уникальный ключ, который сохраняется на стороне сервера одновременно. Каждый раз, когда динамическая карта пароля и сервер вычисляют аутентифицированный динамический пароль на основе одного и того же ключа, одних и тех же случайных параметров (время, событие) и тот же алгоритм, что обеспечивает согласованность пароля и реализацию аутентификации пользователя. Поскольку случайные параметры различны во время каждой аутентификации, динамический пароль, сгенерированный каждый раз, также различен. Поскольку случайность параметров во время каждого расчета обеспечивает непредсказуемость каждого пароля, самый базовый процесс аутентификации пароля обеспечивает безопасность системы. Решите серьезные потери, вызванные мошенничеством пароля, предотвращение злонамеренных злоумышленников или искусственного повреждения и решить проблему вторжения, вызванную утечкой пароля.
Проще говоря, двухфакторная аутентификация идентификации-это система аутентификации идентификации, которая может пройти только сочетание того, что вы знаете, и двух элементов, которые вы можете иметь. Например, банковская карта, снящая деньги из банкомата, является примером двухфакторного механизма аутентификации. Вам нужно знать комбинацию пароля снятия и банковской карты, прежде чем вы сможете его использовать. В настоящее время основная двухфакторная система аутентификации основана на синхронизации времени и имеет высокую долю рынка. Двухфакторная система аутентификации DKEY , двухфакторная система аутентификации RSA и т. Д. Поскольку DKEY увеличивает поддержку аутентификации пароля SMS и гибридной аутентификации SMS +, двухфакторная система аутентификации DKEY более конкурентоспособна, чем RSA.
Выше приведено соответствующее содержание производства кода проверки Java, введенное вам редактором. Я надеюсь, что это будет полезно для вас!