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 =...