http://digilander.libero.it/Cenati

ROT13 De-Codifica in HTA

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript 

 

 

 

 

 

Rot 13: una crittografia molto semplice

Per questo programma ho scritto del codice HTA: HTML Application. L'interfaccia utente è scritta in html, in modo da poter usufruire dei pulsanti e delle textArea insieme al codice vbscript.

La codifica rot13 rappresenta un semplice modo per mascherare un testo. Viene utilizzata spesso nei newsgroup per raccontare qualcosa in modo che non sia intenzionalmente leggibile. La trama di un film o di un libro, ad esempio, ma soprattutto il finale o il colpevole.

Si può scrivere "spoiler" e lasciare un po' di righe vuote, oppure si può codificare il testo in rot13. Meglio indicare espressamente che inizia la codifica, per rendere comprensibile cosa significano i caratteri che seguono.

Ho cercato del codice già pronto, ma non l'ho trovato. Allora ho realizzato io questo script.

La codifica rot13 consiste nel sostituire ogni carattere tra la "a" e la "z" con la lettera che lo segue di 13 caratteri. Se si "esce" oltre la zeta, si ricomincia dalla "a". Questo vale sia per le maiuscole sia per le minuscole.

La decodifica avviene al contrario: si sottrae 13 dalle lettere e si rientra dalla zeta se si è scesi al di sotto della "a". Lo script controlla se l'i-esimo carattere è una lettera. Se lo è sottrae 13 dal codice ascii del carattere. Se si deborda al di sotto dalla "a" devo calcolare la differenza e toglierla da "z"+1.

Faccio un esempio di codifica.

Il testo da codificare è "ciao". In codici ascii sarebbe 99 105 97 111. Aggiungendo 13 ottengo 112 118 110 124. I primi tre numeri ricadono tra la "a" (il cui codice ascii è appunto 97) e la "z" (ascii 122), quindi non ho problemi a convertirli nelle nuove lettere. La quarta lettera, aumentata di 13, finisce oltre la zeta. Calcolo la differenza tra 124 (che è la "o" aumentata di 13) e la zeta (che vale 122). La differenza è due, quindi prendo la seconda lettera ripartendo dalla "a". Attenzione che se sommo due alla "a" arrivo alla "c", mentre io devo arrivare alla "b" per avere effettivamente la seconda lettera. La sequenza giusta è quindi 112,118,110,98. Quindi la codifica di "ciao" risulta essere "pvnb".

Un diverso approccio poteva essere quello di creare una stringa con tutte le lettere dalla a alla zeta prese due volte. Cioè con "....pqrstuvxyzabcdefghilmno". Quindi si poteva cercare la lettera nella stringa e prendere quella successiva di 13 posizioni.

Il cuore del programma è tutto in due funzioni che eseguono la codifica e la decodifica. Il resto serve per l'interfaccia. Ho usato, come ho già scritto, una Html Application. Questo permette di incorporare del codice vbscript in una interfaccia creata in html. Ho una TextArea per inserire il testo da codificare (o da decodificare) e un'altra per ottenere il risultato in modo che sia possibile copiarlo ed incollarlo.

Copia il programma riportato qui sotto in un file con estensione ".hta" oppure scarica l'archivio zip contentente lo script.

<html>
<!--
' *********************************************************
' Codifica ROT13 in hta
' (c) Cenati Giovanni - http://digilander.libero.it/Cenati
' Codice liberamente utilizzabile citando il sito
' Codifica e decodifica un testo in ROT13.
' Le lettere vengono sostituite con quelle che le seguono
' di 13 posizioni. Nel caso si supera la zeta, si
' riparte dalla "A". La punteggiatura e gli altri simboli
' rimangono invariati.
' *********************************************************
//-->
	<title>Codifica Rot13</title><HTA:APPLICATION ID="Rot13" 
	APPLICATIONNAME="Aggiorna Archivio Atti Impeditivi"
	SCROLL="no" SINGLEINSTANCE="no" BORDER="thin"
	BORDERSTYLE="raised" CONTEXTMENU="no"
	SELECTION="no" WINDOWSTATE="normal"
	CAPTION="yes" MINIMIZEBUTTON="yes"
	MAXIMIZEBUTTON="yes" SHOWINTASKBAR="yes" SYSMENU="yes">
	
<head>
<style>
BODY {
    background-color: #ffcc99;
    font-family: times new roman;
    font-size: 9pt;
    margin-top: 10px;
    margin-left: 10px;
    margin-right: 10px;
    margin-bottom: 10px;}
</style>
<script language="vbscript">

Sub Window_Onload
	'resize parent window
	self.Focus()
	self.ResizeTo 400,420
	self.MoveTo 50,50
End Sub

Public Function encrypt(strInput)
	Dim n, l 
	n=13 
	On Error Resume Next 
	For i=1 To len(strInput) 
		l = Asc(Mid(strInput, i, 1)) 
		If l >= asc("A") And l <= asc("Z") Then 
			l = l + n 
			If l > asc("Z") Then l = asc("A") + (l - asc("Z")-1) 
			strInput= left(strInput, i-1) & _     
	      	Chr(l) & _ 
     			right (strInput, len(strInput)-i) 
     	End If 
     	If l >= asc("a") And l <= asc("z") Then 
			l = l - n  
			If l < asc("a") Then l = asc("z") - (asc("a")-l-1) 
			strInput= left(strInput, i-1) & _     
	      	Chr(l) & _ 
     			right (strInput, len(strInput)-i)
     	End If 
	Next
	encrypt=strInput
End Function
 
Public Function decrypt(strInput)
	Dim n, l
	n=13
	On Error Resume Next
	For i=1 To len(strInput)
		l = Asc(Mid(strInput, i, 1))
		If l >= asc("A") And l <= asc("Z") Then
			l = l - n
			If l < asc("A") Then l = asc("Z") - (asc("A") - l - 1)
			strInput= left(strInput, i-1) & _    
	      	Chr(l) & _
     			right (strInput, len(strInput)-i)
     	End If
     	If l >= asc("a") And l <= asc("z") Then
			l = l - n 
			If l < asc("a") Then l = asc("z") - (asc("a") - l - 1)
			strInput= left(strInput, i-1) & _    
	      	Chr(l) & _
     			right (strInput, len(strInput)-i)
     	End If 
	Next
	decrypt=strInput
End Function

sub btncodifica_onclick()
	risultato.value=encrypt(originale.value)
end sub

sub btndecodifica_onclick()
	risultato.value=decrypt(originale.value)
end sub

</script>
</head>
<body>
<center>
	<h1>Codifica e decodifica <br>con l'algoritmo ROT13</h1>
	<textarea name="originale" rows="5" cols="35"></textarea>
	<p>
	<input id=btncodifica  class="button" type="button" value="Codifica" name="btncodifica" >
	<input id=btndecodifica  class="button" type="button" value="Decodifica" name="btndecodifica"  >
	<p>
	<textarea name="risultato" rows="5" cols="35"></textarea>
	<a href=http://digilander.libero.it/Cenati>http://digilander.libero.it/Cenati</a>
</center>
</body>
<html>

Giovanni Cenati

 

 


© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript