← RoseCode

ROSECODE 290

解码这段 JavaScript

Decode it (javascript)

sinan · 密码 ·

原题的交互功能已停用;现存程序以代码文本保留。

function func()
{
	var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	var A=parseInt(myform.myinput.value);
	var K=404;
	var KK=K*K;
	var AA=A*A;
	var encodedText = document.getElementById('encoded_text').innerHTML;
	var outputDiv = document.getElementById("outputDiv");
	outputDiv.innerHTML = "<pre\>";
	if (A<=0) {
		alert("Should be >0");
	} else {
		outputDiv.innerHTML += "<font size=+2 \><b\>Key="+A+"</b\></font\><br\><br\>";
		// K*A^2+K*x-A-x^2=0 : x^2-Kx+A-KA^2=0
		var delta=Math.sqrt(KK+4*(AA-1)*K);
		var x=Math.floor((K+delta)/2);
		for(var ii=-1; ii<2; ++ii){
			var t=x+ii;
			var tt=t*t;
			var z1=K*(AA+t), z2=(tt+A);
			if (z1==z2){
				var arr=new Array();
				var i=0, keylen=0, s=t, cd=0;
				while (s>0) {
					arr[keylen++]=s%10;
					s=Math.floor(s/10);
				}
				outputDiv.innerHTML += "Decoded: ";
				var j=keylen, k=0;
				for(i=0; i<encodedText.length; ++i) {
					var inx=keyStr.indexOf(encodedText.charAt(i));
					if(inx<0) continue;
					if(--j<0)
						j+=keylen;
					inx-=arr[j];
					if (inx<0)
						inx+=64;
					outputDiv.innerHTML += keyStr.charAt(inx);
					if(i>0 && (i&63)==0)
						outputDiv.innerHTML += "<br\>";
					cd+=k++*keyStr.charCodeAt(inx);
				}
				if (cd==360117)
					outputDiv.innerHTML += "<br\><br\><font color=\"green\"/>Decoded successfully.</font/><br\>";
				else
					outputDiv.innerHTML += "<br\><br\><font color=\"red\"/>Decoded something but it doesn't seem to be OK.</font/><br\>";
				break;
			}
		}
		outputDiv.innerHTML += "<br\>";
		if (ii==2)
			outputDiv.innerHTML += "<br\><font color=\"red\"/>Not a key!</font/><br\>";
	}
	outputDiv.innerHTML += "</pre\>";
}

X5dzkDFkg5BnNUEchPVkYb87f7X1QNu0MDR6U1pzQLjCPHUlNPT0KJRsRHZu
iJd0eYTohf5kbLA/bcLmgeWmMGmomEpC
输入密钥进行解码。
关键= myinput = 0