Created
May 31, 2022 19:06
-
-
Save nfreear/b9cead2f47cad238373b687c8cf16bc1 to your computer and use it in GitHub Desktop.
Text captcha test | https://textcaptcha.com/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> <title> Text captcha test </title> | |
<style> | |
body { font: 1rem sans-serif; margin: 1rem auto; max-width: 33rem; } | |
form, input, output, button { | |
border: 1px solid #bbb; | |
border-radius: .2rem; | |
font: inherit; | |
padding: .4rem 1rem; | |
} | |
.human-no output { background: #fcc; } | |
.human-yes output { background: #cfc; } | |
/* hidden-required ?? | |
*/ | |
.hidden-input { | |
border: 1px solid #ddd; | |
height: 2px; | |
width: 2px; | |
padding: 0; | |
} | |
.hidden-input:focus { | |
height: auto; | |
width: 3rem; | |
padding: 1px; | |
transition: all 2s; | |
} | |
</style> | |
<h1> Text captcha test </h1> | |
<form id="textcaptcha-form"> | |
<p> | |
<label for="tc-input-1">[ Question ]</label> | |
<input id="tc-input-1" name="answer" required /> | |
</p> | |
<p><button type="submit">I'm human!</button> | |
<p><output role="status" aria-label="Are you human?">?</output></p> | |
<input class="hidden-input" title="I'm hidden?" name="my-tc_rAnDoM-123" required /> | |
</form> | |
<script type="module"> | |
const { fetch } = window; | |
const TC_ID = '[email protected]'; | |
const TC_URL = `https://api.textcaptcha.com/${TC_ID}.json`; | |
const TC_FORM = document.querySelector('#textcaptcha-form'); | |
const TC_LABEL= TC_FORM.querySelector('label'); | |
const TC_BTN = TC_FORM.querySelector('button'); | |
const TC_STAT = TC_FORM.querySelector('output'); | |
let tcData; | |
// @TODO: fetchTextCaptcha(); | |
testTextCaptcha(); | |
async function fetchTextCaptcha () { | |
const RESP = await fetch(TC_URL); // , { mode: 'no-cors' }); | |
const DATA = await RESP.json(); | |
console.debug('tc.fetch:', DATA); | |
TC_LABEL.textContent = DATA.q; | |
tcData = DATA; | |
return DATA; | |
} | |
async function testTextCaptcha () { | |
const DATA = {"q":"Edward's name is?","a":["a53f3929621dba1306f8a61588f52f55"]}; | |
console.debug('tc.test:', DATA); | |
TC_LABEL.textContent = DATA.q; | |
tcData = DATA; | |
return DATA; | |
} | |
/* fetch(TC_URL) | |
.then(resp => resp.json()) | |
.then(data => { | |
console.debug('tc:', data); | |
TC_LABEL.textContent = data.q; | |
}); */ | |
TC_FORM.addEventListener('submit', ev => { | |
ev.preventDefault(); | |
TC_BTN.setAttribute('disabled', 'disabled'); | |
const ANSWER = ev.target.elements.answer.value.toLowerCase(); | |
const md5 = MD5(ANSWER); | |
let found = false; | |
tcData.a.forEach(ans => { | |
if (ans === md5) found = true; | |
}); | |
console.debug('tc.submit:', ANSWER, found, ev); | |
TC_FORM.classList.add(`human-${found ? 'yes' : 'no'}`); | |
TC_STAT.textContent = found ? 'Yay, you\'re human! ✔️' : 'Not human! ❌'; | |
// @TODO: disable / clear / reset? | |
}); | |
/*! https://stackoverflow.com/questions/14733374/how-to-generate-an-md5-file-hash-in-javascript-node-js | |
edited Feb 21, 2020 at 9:50 | Mr. Míng (2,38355 gold badges3030 silver badges4646 bronze badges) | |
answered Nov 2, 2015 at 20:15 | valdeci (11.9k66 gold badges5151 silver badges77) | |
*/ | |
function MD5 (d) {var r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};function M(d){for(var _,m="0123456789ABCDEF",f="",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}function V(d){for(var _="",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}function md5_cmn(d,_,m,f,r,i){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}function md5_ff(d,_,m,f,r,i,n){return md5_cmn(_&m|~_&f,d,_,r,i,n)}function md5_gg(d,_,m,f,r,i,n){return md5_cmn(_&f|m&~f,d,_,r,i,n)}function md5_hh(d,_,m,f,r,i,n){return md5_cmn(_^m^f,d,_,r,i,n)}function md5_ii(d,_,m,f,r,i,n){return md5_cmn(m^(_|~f),d,_,r,i,n)}function safe_add(d,_){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_ } | |
console.debug('MD5(90)', MD5('90')); | |
console.debug('MD5(ninety)', MD5('ninety')); | |
</script> | |
<pre> | |
NDF, 27-May-2022. | |
* https://textcaptcha.com/ | |
</pre> | |
<!-- | |
You need to trim, lower-case and MD5 hash ... | |
{"q":"Edward's name is?","a":["a53f3929621dba1306f8a61588f52f55"]} | |
{"q":"Enter the largest number of ninety, 52, thirty three, 83 or 60:","a":["8613985ec49eb8f757ae6439e879bb2a","2a08e96cadfba8bfb49c392bd4ec27a7"]} | |
<captcha> | |
<question>Of the numbers 65, ninety six or ninety seven, which is the biggest?</question> | |
<answer>e2ef524fbf3d9fe611d5a8e90fefdc9c</answer> | |
<answer>aecdcf55204804ff8423f02d1147e773</answer> | |
</captcha> | |
--> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment