JSFiddle - React, Tailwind, and code Playground
HTML
<h1>ScreamingFrogSEOSpider 3.3+ Keygen</h1>
<label>
<span>User</span>
<input type="text" id="user" value="user" autofocus="true" name="login" />
</label>
<label>
<span>Key</span>
<input type="text" id="key" value="" readonly="true" />
</label>
<label>
<span>Expires</span>
<div id="expire"></div>
</label>
CSS
* {
box-sizing: border-box;
margin: 0;
}
html {
height: 100%;
}
body {
display: flex;
min-height: 100%;
padding: 15px;
flex-direction: column;
align-items: center;
justify-content: center;
font-family: sans-serif;
font-size: 20px;
background: radial-gradient(ellipse at center, #F5F1EE 0%,#B0A191 100%);
}
h1 {
font-size: 18px;
font-weight: normal;
color: #B35D00;
margin: 0 0 1.3em;
border-bottom: 1px solid;
}
label {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 0.5em;
}
label > span {
width: 8ex;
text-align: right;
margin-right: 1ex;
text-transform: uppercase;
color: #8E867F;
text-shadow: 0 1px 0 #FDF9F4;
}
label > input {
font-size: inherit;
width: 40ex;
padding: 0.2em 0.4em;
border-radius: 0.1em;
color: #333;
border: 1px solid;
border-color: #999 #aaa #bbb;
box-shadow: 0 1px 0px rgba(0,0,0,0.1) inset, 0 0 3px rgba(0,0,0,0.05) inset;
background-color: #fff;
outline: none;
}
label > input:focus {
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15) inset, 0 0 3px rgba(0, 0, 0, 0.1) inset, 0 0 2px 0px #0095ff;
border-color: #258fda;
}
#expire {
width: 40ex;
}
JavaScript
(function(win, doc) {
var $user = doc.getElementById('user');
var $key = doc.getElementById('key');
var $expire = doc.getElementById('expire');
const LICENSE_PERIOD = 395 * 60 * 60 * 24;
const SECRET_KEY = 'FM8_mbz8FpIIap5a14 -kpuP0CtNxv8teCk2Ms2F';
$user.addEventListener('input', function(e) { update(); }, false);
$user.addEventListener('change', function(e) { update(); }, false);
update();
function update() {
var user = $user.value.trim();
var key = '';
var expire = '';
if (user) {
key = generate(user);
expire = new Date(Date.now() + LICENSE_PERIOD * 1000).toLocaleDateString();
}
$key.value = key;
$expire.textContent = expire;
}
function generate(user) {
var expires = Date.now() / 1000 | 0 + LICENSE_PERIOD;
var part2 = expires.toString(10);
var hash = sha1(user + part2 + SECRET_KEY).toUpperCase();
while (hash.length < 40) hash = '0' + hash;
var part1 = hash.substring(0, 10);
var part3 = hash.substring(30, 40);
return part1 + '-' + part2 + '-' + part3;
}
function sha1(str) {
// discuss at: http://phpjs.org/functions/sha1/
// original by: Webtoolkit.info (http://www.webtoolkit.info/)
// improved by: Michael White (http://getsprink.com)
// improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// input by: Brett Zamir (http://brett-zamir.me)
// example 1: sha1('Kevin van Zonneveld');
// returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897'
var rotate_left = function (n, s) {
var t4 = (n << s) | (n >>> (32 - s));
return t4;
};
var cvt_hex = function (val) {
var str = '';
var i;
var v;
for (i = 7; i >= 0; i--) {
v = (val >>> (i * 4)) & 0x0f;
str += v.toString(16);
}
return str;
};
var blockstart;
var i, j;
var W = new Array(80);
var H0 = 0x67452301;
var H1 = 0xEFCDAB89;
var H2 = 0x98BADCFE;
var H3 = 0x10325476;
var H4 = 0xC3D2E1F0;
var A, B, C, D, E;
var temp;
// utf8_encode
str =...