Aujourd'hui, je voulais changer le style du forum Discuz. De façon inattendue, après avoir téléchargé le fichier de style, j'ai découvert qu'il était crypté en Base64.
Xiao Lin a recommandé une page décryptée et le code extrait est le suivant :
Copiez le code comme suit :
<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
<tête>
<title>Encodage et décodage Base64 et URL et Hex</title>
<meta name=description content=Encode ou décode les données en Base64 ou encodage URL à l'aide de JavaScript côté client />
<meta name=keywords content=base64, base 64, urlencode, urldecode, hexencode, hex encode, hexdecode hex decode, javascript base64, javascript base 64, javascript urlencode, javascript urldecode, javascript hexencode, javascript hexdecode />
<link rel=shortcut icon href=http://ostermiller.org/favicon.ico type=image/x-icon />
<langage de script=javascript type=text/javascript>
<!--
fonction urlDecode(str){
str=str.replace(new RegExp('//+','g'),' ');
return unescape(str);
}
fonction urlEncode(str){
str=évasion(str);
str=str.replace(new RegExp('//+','g'),'%2B');
return str.replace(new RegExp('%20','g'),'+');
}
varEND_OF_INPUT = -1 ;
var base64Chars = nouveau tableau (
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'Je', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r','s', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3',
'4','5','6','7','8','9','+','/'
);
var reverseBase64Chars = new Array();
pour (var i=0; i < base64Chars.length; i++){
reverseBase64Chars[base64Chars[i]] = je;
}
var base64Str;
var base64Count;
fonction setBase64Str(str){
base64Str = chaîne ;
base64Count = 0 ;
}
fonction readBase64(){
if (!base64Str) renvoie END_OF_INPUT ;
if (base64Count >= base64Str.length) renvoie END_OF_INPUT ;
var c = base64Str.charCodeAt(base64Count) & 0xff;
base64Count++;
retourner c;
}
fonction encodeBase64(str){
setBase64Str(str);
var résultat = '';
var inBuffer = nouveau tableau (3);
var lineCount = 0;
var terminé = faux ;
while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT){
inBuffer[1] = readBase64();
inBuffer[2] = readBase64();
résultat += (base64Chars[ inBuffer[0] >> 2 ]);
si (inBuffer[1] != END_OF_INPUT){
résultat += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
si (inBuffer[2] != END_OF_INPUT){
résultat += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
résultat += (base64Chars [inBuffer[2] & 0x3F]);
} autre {
résultat += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
résultat += ('=');
fait = vrai ;
}
} autre {
résultat += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
résultat += ('=');
résultat += ('=');
fait = vrai ;
}
nombre de lignes += 4 ;
si (lineCount >= 76){
résultat += ('/n');
lineCount = 0 ;
}
}
renvoyer le résultat ;
}
fonction readReverseBase64(){
if (!base64Str) renvoie END_OF_INPUT ;
tandis que (vrai){
if (base64Count >= base64Str.length) renvoie END_OF_INPUT ;
var nextCharacter = base64Str.charAt(base64Count);
base64Count++;
si (reverseBase64Chars[nextCharacter]){
retourner reverseBase64Chars[nextCharacter] ;
}
if (nextCharacter == 'A') renvoie 0 ;
}
renvoyer END_OF_INPUT ;
}
fonction ntos(n){
n=n.toString(16);
si (n.length == 1) n=0+n;
n=%+n;
retourner unescape(n);
}
fonction decodeBase64(str){
setBase64Str(str);
var résultat = ;
var inBuffer = nouveau tableau (4);
var terminé = faux ;
while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT
&& (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){
inBuffer[2] = readReverseBase64();
inBuffer[3] = readReverseBase64();
résultat += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4));
si (inBuffer[2] != END_OF_INPUT){
résultat += ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
si (inBuffer[3] != END_OF_INPUT){
résultat += ntos((((inBuffer[2] << 6) & 0xff) | inBuffer[3]));
} autre {
fait = vrai ;
}
} autre {
fait = vrai ;
}
}
renvoyer le résultat ;
}
var digitArray = nouveau tableau ('0','1','2','3','4','5','6','7','8','9','a', 'b', 'c', 'd', 'e', 'f');
fonction versHex(n){
var résultat = ''
var début = vrai ;
pour (var i=32; i>0;){
je-=4;
var chiffre = (n>>i) & 0xf;
si (!start || chiffre != 0){
début = faux ;
résultat += digitArray[chiffre];
}
}
return (result==''?'0':result);
}
pad de fonction (str, len, pad) {
var résultat = str;
pour (var i=str.length; i<len; i++){
résultat = pad + résultat ;
}
renvoyer le résultat ;
}
fonction encodeHex(str){
var résultat = ;
pour (var i=0; i<str.length; i++){
result += pad(toHex(str.charCodeAt(i)&0xff),2,'0');
}
renvoyer le résultat ;
}
fonction décodageHex(str){
str = str.replace(new RegExp(s/[^0-9a-zA-Z]//g));
var résultat = ;
var prochainchar = ;
pour (var i=0; i<str.length; i++){
nextchar += str.charAt(i);
si (nextchar.length == 2){
résultat += ntos(eval('0x'+nextchar));
caractère suivant = ;
}
}
renvoyer le résultat ;
}
//--></script>
</tête>
<corps>
<nom du formulaire=code onsubmit=return false()>
<textarea name=text style='width:100%;height:75%;' onfocus='if (this.value==Entrez le texte à encoder ou à décoder ici.){this.value=;}'>Entrez le texte à encodez ou décodez ici.</textarea>
<tableau>
<tr><td align=center>
<input value=Encode type=button onclick=document.code.text.value=urlEncode(document.code.text.value);>
</td><td align=center>
URL
</td><td align=center>
<input value=Decode type=button onclick=document.code.text.value=urlDecode(document.code.text.value);>
</td></tr>
<tr><td align=center>
<input value=Encode type=button onclick=document.code.text.value=encodeBase64(document.code.text.value);>
</td><td align=center>
Base 64
</td><td align=center>
<input value=Decode type=button onclick=document.code.text.value=decodeBase64(document.code.text.value);>
</td></tr>
<tr><td align=center>
<input value=Encode type=button onclick=document.code.text.value=encodeHex(document.code.text.value);>
</td><td align=center>
Hex
</td><td align=center>
<input value=Decode type=button onclick=document.code.text.value=decodeHex(document.code.text.value);>
</td></tr>
<tr><td align=center>
</td><td align=center>
<type d'entrée=valeur de réinitialisation=Effacer>
</td><td align=center>
</td></tr>
</table>
</form>
<hr>
L'encodage/décodage Base64 a été porté à partir d'un <a href=http://ostermiller.org/utils/Base64.html>encodeur/décodeur Java Base64</a>.<br>
L'encodage/décodage Base64 a été porté sur <a href=http://ostermiller.org/base64_actionscript.html>Macromedia Actionscript</a>.<br>
<h3>Licence</h3>
<p>Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier.
selon les termes de la licence publique générale GNU telle que publiée par le Free
Software Foundation ; soit la version 2 de la licence, soit (à votre choix)
toute version ultérieure.</p>
<p>Ce programme est distribué dans l'espoir qu'il sera utile,
mais SANS AUCUNE GARANTIE, sans même la garantie implicite de QUALITÉ MARCHANDE ;
ou APTITUDE À UN USAGE PARTICULIER Voir le
<a href=http://www.gnu.org/copyleft/gpl.html>GNU
Licence publique générale</a> pour plus de détails.</p>
<div style=padding:0.2cm;><a href=http://ostermiller.org/calc/>Plus de convertisseurs, calculatrices et autres goodies JavaScript</a></div>
<div style=padding:0.2cm;text-align:right;><a href=http://ostermiller.org/>ostermiller.org</a> (<a href=http://ostermiller.org/siteindex .html>index du site</a>)</div>
<div style=padding:0.2cm;><p>Copyright <a href=http://ostermiller.org/contact.pl?regarding=JavaScript+Encoding class=mail>Stephen Ostermiller</a> 2003-2006</ p></div>
</corps>
</html>