Cast 128 ActiveX component v1.2

Un semplice componente ActiveX che permette di criptare/decriptare dei dati tramite l'algoritmo Cast128. Funge anche da codec base64 e da convertitore da stringa ad Array e viceversa.
Coded by Midori ( ), original Cast 128 implementation by Steve Reid <sreid@sea-to-sky.net>
http://www.paipai.net

English Version:
http://www.paipai.net/texts/asp-cast128-1.2.htm

Informazioni:
Puoi downloadare il componente qui: http://www.paipai.net/texts/asp-cast128-1.2ita.zip
Per contattarmi:
Questa pagina online: http://www.paipai.net/texts/asp-cast128-1.2ita.htm
La home page del componente: http://www.paipai.net/texts/components.htm

(C) & Disclaimer
Questo software è 100% free. Puoi disassemblarlo, distrugerlo, modificarlo o gettarlo, senza nessuna restrizione. Possibilmente, non dimenticatevi di me e di Steve Reid nei vostri credits.
Esso ti è "donato così com'è", senza nessun tipo di garanzia. Sono disponibili i sorgenti VC++.

L'implementazione di Cast128 utilizzata è stata fatta al di fuori degli USA.

 

Novità in questa versione:

Aggiunta compatibilità con il metodo ASP Response.BinaryWrite degli output di tipo Array ( cast128ArrayEnc, cast128ArrayDec, b64ArrayEnc )
Aggiunti metodi di conversione da Stringa/Array ad Array di byte e viceversa ( toBArray, toString ).

Indice

0. Bug Conosciuti
1. Installazione
2. Documentazione

2.1.   cast128encode
2.2.   cast128decode
2.3.   cast128ArrayEnc
2.4.   cast128ArrayDec
2.5.   b64StrEnc
2.6.   b64StrDec
2.7.   b64ArrayEnc
2.8.   b64ArrayDec
2.9.   encode
2.10. decode
2.11 toBArray
2.12 toString

3. Esempi d'uso
4. History
5. Struttura dell'output del metodo cast128encode
6. Note sul Base64

 

1. Installazione

Per installare questo componente:

1) Copia il file cast.dll in una cartella di sistema (c:\windows o c:\winnt o c:\winnt\system32 o simili)
2) esegui il comando regsvr32.exe c:\winnt\system32\cast.dll (se hai messo cast.dll in c:\winnt\system32 )
3) Fine! E' pronto per essere usato!

Per disinstallare il componente:

1) Non cè un "modo pulito" per farlo.
2) esegui regedit.exe e cerca queste strighe:
B11567EB-EF87-4BDD-9070-581EAB099A08
2121B8E7-E209-410D-AF86-20CBD9A96527
12BBFB97-0AEC-4837-8061-12CA8EAD166B
3) Cancella ogni chiave del registro che contiene una di queste strighe.
4) cancella il file cast.dll

2. Documentazione

Il componente usa Cast128 come algoritmo di criptazione. Si tratta di un algoritmo di tipo "simmetrico", e quindi occorre usare la stessa chiave sia per criptare che per decriptare dei dati.
Alcuni metodi generano l'output codificato mediante Base64: questo permette di trattare l'output come una stringa ASCII.
Il componente può essere usato anche come semplice codec Base64.
Come input si possono usare stringhe o array di bytes. Tutti gli array che alcuni metodi forniscono come output sono compatibili con il tipo di dati accettato da Response.BinaryWrite.
Infine, ci sono due metodi ( toBArray, toString ) che permettono di convertire gli array di interi in stringhe e le stringhe oppure gli array di interi in array di byte.

Il componente è stato creato originariamente per criptare dati importanti inviati tramite cookies (come login e password), si chiama "cast" ed implementa un'unica interfaccia chiamata "cipher".

Per creare un'istanza di cipher si può usare il riferimento simbolico "cast.cipher" oppure il CLSID {12BBFB97-0AEC-4837-8061-12CA8EAD166B}

Per creare un'istanza in VisualBasic/VBScript:
Dim objCast As Object
set objCast = CreateObject("cast.cipher")

In ASP:
Dim objCast
set objCast = Server.CreateObject("cast.cipher")

 

L'interfaccia di cipher si compone di questi metodi:

1)   VARIANT cast128encode(VARIANT key, VARIANT inString)
2)   VARIANT cast128decode(VARIANT key, VARIANT inBase64String)
3)   VARIANT cast128ArrayEnc(VARIANT key, VARIANT inArray)
4)   VARIANT cast128ArrayDec(VARIANT key, VARIANT inArray)
5)   VARIANT b64StrEnc(VARIANT inString)
6)   VARIANT b64StrDec(VARIANT inBase64String)
7)   VARIANT b64ArrayEnc(VARIANT inArray)
8)   VARIANT b64ArrayDec(VARIANT inBase64String)
9)   VARIANT encode(VARIANT key, VARIANT inString)
10) VARIANT decode(VARIANT key, VARIANT inBase64String)
11) VARIANT toBArray(VARIANT inData)
12) VARIANT toString(VARIANT inArray)

 

2.1. cast128encode

VARIANT cast128encode(VARIANT key, VARIANT inString)

Cripta una stringa usando la chiave specificata in key. Restituisce una stringa base64. Usa cast128ArrayEnc se vuoi criptare un array.

Parametri:

key

un VARIANT contenente la stringa che rappresenta la chiave di criptazione/decriptazione.
Deve necessariamente essere una stringa, oppure nessun output verrà generato.
Qualsiasi carattere ASCII è valido, tranne quello rappresentato dallo 0 (zero or NULL)

inString un VARIANT contenente la stringa che deve essere criptata.
Deve necessariamente essere una stringa, oppure nessun output verrà generato.
Qualsiasi carattere ASCII è valido, tranne quello rappresentato dallo 0 (zero or NULL)

Restituisce:
Un VARIANT contenente una stringa base64. La stringa contiene solamente questi caratteri:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz0123456789+/
e lo speciale carattere di terminazione '='

La stringa restituita è contenuta in un VARIANT.

 

2.2. cast128decode

VARIANT cast128decode(VARIANT key, VARIANT inBase64String)

Decripta una stringa generata in precedenza da cast128encode(), usando la chiave specificata in key. Restituisce la stringa originale. Se vuoi decriptare un array usa cast128ArrayDec.

Parametri:

key
un VARIANT contenente la stringa che rappresenta la chiave di criptazione/decriptazione.
Deve necessariamente essere una stringa, oppure nessun output verrà generato.
Qualsiasi carattere ASCII è valido, tranne quello rappresentato dallo 0 (zero or NULL)
inBase64String un VARIANT contenente la stringa che deve essere decriptata. Deve contenere una stringa precedentemente generata da cast128encode()

Restituisce:
Un VARIANT contenente la stringa originale.

 

2.3. cast128ArrayEnc

VARIANT cast128ArrayEnc(VARIANT key, VARIANT inArray)

Cripta un array di byte usando la chiave specificata in key. Restituisce un array contenente i dati criptati. Se vuoi criptare stringhe usa cast128encode.

Parametri:

key
un VARIANT contenente la stringa che rappresenta la chiave di criptazione/decriptazione.
Deve necessariamente essere una stringa, oppure nessun output verrà generato.
Qualsiasi carattere ASCII è valido, tranne quello rappresentato dallo 0 (zero or NULL)
inArray un VARIANT contenente i dati da criptare. Deve essere un array di VARIANT.
Ogni elemento dovrebbe contenere un byte (unsigned 8 bit). L'array deve contenere un numero di elementi che sia multiplo di 8, oppure non verrà generato output (cast accetta solamente blocchi di 64 bit come input).

Restituisce:
Un VARIANT contenente un array di byte (unsigned 8 bit) che contiene i dati criptati, compatibile con il metodo ASP Response.BinaryWrite. Il numero di elementi è lo stesso dell'array sorgente.
Per chi fosse interessato, il VARIANT restituito è di tipo VT_ARRAY | VT_UI1 (cercare le parole "VARIANT AND VARIANTARG" nella MSDN, http://msdn.microsoft.com/ ).

 

2.4. cast128ArrayDec

VARIANT cast128ArrayDec(VARIANT key, VARIANT inArray)

Decripta un array di byte precedentemente criptato mediante cast 128 ed usando la chiave specificata in key. Restituisce un array contenente i dati decriptati. Se vuoi decriptare stringhe usa cast128decode.

Parametri:

key
un VARIANT contenente la stringa che rappresenta la chiave di criptazione/decriptazione.
Deve necessariamente essere una stringa, oppure nessun output verrà generato.
Qualsiasi carattere ASCII è valido, tranne quello rappresentato dallo 0 (zero or NULL)
inArray

un VARIANT contenente i dati da decriptare. Deve essere un array di VARIANT.
Ogni elemento dovrebbe contenere un byte (unsigned 8 bit). L'array deve contenere un numero di elementi che sia multiplo di 8, oppure non verrà generato output (cast accetta solamente blocchi di 64 bit come input).

Restituisce:
Un VARIANT contenente un array di byte (unsigned 8 bit) che contiene i dati criptati, compatibile con il metodo ASP Response.BinaryWrite. Il numero di elementi è lo stesso dell'array sorgente.
Per chi fosse interessato, il VARIANT restituito è di tipo VT_ARRAY | VT_UI1 (cercare le parole "VARIANT AND VARIANTARG" nella MSDN, http://msdn.microsoft.com/ ).

 

2.5. b64StrEnc

VARIANT b64StrEnc(VARIANT inString)

Codifica una stringa usando base64. L'output è una stringa base64. Se vuoi codificare array usa b64ArrayEnc.

Parametri:

inString un VARIANT contenente la stringa che deve essere codificata..
Deve necessariamente essere una stringa, oppure nessun output verrà generato.
Qualsiasi carattere ASCII è valido, tranne quello rappresentato dallo 0 (zero or NULL)

Restituisce:
Un VARIANT contenente una stringa Base64.

 

2.6. b64StrDec

VARIANT b64StrDec(VARIANT inBase64String)

Decodifica una stringa codificata in base64. De vuoi decodifcare attay usa b64ArrayDec.

Parametri:

inBase64String

un VARIANT contenente la stringa base64 da decodificare.Deve necessariamente essere una stringa, oppure nessun output verrà generato. Inoltre la lunghezza deve essere multipla di 4 per essere una stringa base64 valida e deve contenere solo i seguenti caratteri : ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz0123456789+/
e lo speciale carattere di terminazione '='

Restituisce:
Un VARIANT contenente la stringa originale.

 

2.7. b64ArrayEnc

VARIANT b64ArrayEnc(VARIANT inArray)

Codifica un array di bytes usando base64. L'output è una stringa base64.
Se vuoi codificare stringe usa b64StrEnc.

Parametri:

inArray Un VARIANT contenente i dati da codificare. Deve essere un array di VARIANT.
Ogni elemento deve essere un byte (unsigned 8 bit).

Restituisce:
Un VARIANT contenente la stringa base64.

 

2.8. b64ArrayDec

VARIANT b64ArrayDec(VARIANT inBase64String)

Decodifica una stringa base64 e pone i dati in un array di bytes (unsigned 8 bit). Se vuoi l'output in una stringa usa b64StrDec.

Parametri:

inBase64String

un VARIANT contenente la stringa base64 da decodificare.Deve necessariamente essere una stringa, oppure nessun output verrà generato. Inoltre la lunghezza deve essere multipla di 4 per essere una stringa base64 valida e deve contenere solo i caratteri ammessi dal base64.

Restituisce:
Un VARIANT contenente un array in cui sono posti i dati decodificati, compatibile con il metodo ASP Response.BinaryWrite.
Per chi fosse interessato, il VARIANT restituito è di tipo VT_ARRAY | VT_UI1 (cercare le parole "VARIANT AND VARIANTARG" nella MSDN, http://msdn.microsoft.com/ ). .

 

2.9. encode

VARIANT encode(VARIANT key, VARIANT inString)

Un alias di cast128encode.

 

2.10. decode


VARIANT decode(VARIANT key, VARIANT inBase64String)

Un alias di cast128decode.

 

2.11. toBArray

VARIANT toBArray(VARIANT inData)

Converte una stringa in un array di bytes. Tale Array è utilizzabile con gli altri metodi della classe cipher (ad esempio b64ArrayEnc) e con il metodo ASP Response.BinaryWrite. Se vuoi convertire un array in una stringa usa il metodo toString.

Parametri:

inData

un VARIANT contenente la stringa da convertire oppure un Array di interi (con o senza segno).

Restituisce:
Un VARIANT contenente un Array di byte, compatibile con il metodo ASP Response.BinaryWrite.
Per chi fosse interessato, il VARIANT restituito è di tipo VT_ARRAY | VT_UI1 (cercare le parole "VARIANT AND VARIANTARG" nella MSDN, http://msdn.microsoft.com/ ).

 

2.12. toString

VARIANT toString(VARIANT inArray)

Converte un Array di interi o di byte in una stringa. Se vuoi convertire una stringa in un Array di Byte usa il metodo toBArray.

Parametri:

inArray

un VARIANT contenente un Array di interi (con o senza segno).
Per chi fosse interessato, il VARIANT in ingresso può essere del tipo VT_ARRAY | VT_UI1 oppure VT_ARRAY | VT_UI4 oppure VT_ARRAY | VT_I4 (cercare le parole "VARIANT AND VARIANTARG" nella MSDN, http://msdn.microsoft.com/ ).

Restituisce:
Un VARIANT contenente una stringa.


3. Esempi d'uso

Cast Encrypt/Decrypt di una stringa in Visual Basic:

 	Set ObjCast = CreateObject("cast.cipher")
	Dim tkey As Variant
	Dim original As Variant
	Dim encodedText As Variant
	Dim decodedText As Variant
	tkey = "the Key"
	original = "Encoded Text"
	encodedText = ObjCast.cast128encode(tkey, original)
	decodedText = ObjCast.cast128decode(tkey, encodedText)
	msgbox("Dati originali:" & original & vbNewline & "Dati criptati: " & encodedText & vbNewline & _
		"Dati decriptati: " & decodedText)
	Set ObjCast = Nothing
	

Cookies with ASP VBScript:
settaggio di un cookie criptato
	set objCast128 = server.createObject("cast.cipher")
	response.cookies("CookieName")("server") = objCast128.cast128encode("pass", "www.anon.net" )
	response.cookies("CookieName")("login") = objCast128.cast128encode("pass", "myname")
	response.cookies("CookieName")("password") = objCast128.cast128encode("pass","mypassword")
	Response.Cookies("CookieName").Expires = dateadd("d",10,date)
	Response.Cookies("maiCookieNamelclient").Domain = "www.anon.net"
	Response.Cookies("CookieName").Path = "/"
	Response.Cookies("CookieName").Secure = false
	
Prelevamento di un cookie criptato
	set objCast128 = server.createObject("cast.cipher")
	encodedLogin = request.cookies("CookieName")("login")
	encodedPassword = request.cookies("CookieName")("password")
	encodedServer = request.cookies("CookieName")("server")
	Login = objCast128.cast128decode("pass", encodedLogin )
	Password = objCast128.cast128decode("pass", encodedPassword )
	MyServer = objCast128.cast128decode("pass", encodedServer )
 	
Base64 encoding/decoding di un array in ASP VBScript:
	set objCast128 = server.createObject("cast.cipher")
	OriginalArray = Array(1, 3, 90, 23, 66, 3)
	strB64EncodedArray = objCast128.b64ArrayEnc(OriginalArray)
	DecodedArray = objCast128.b64ArrayDec(strB64EncodedArray)
	response.write("Dati originali: " & OriginalArray(0) & ", " & OriginalArray(1) & _
		", " & OriginalArray(2) & ", " & OriginalArray(3) & ", " & OriginalArray(4) & _
		", " & OriginalArray(5) & )
	response.write("dati codificati in Base64: " strB64EncodedArray & )
	response.write("dati decodificati: " & DecodedArray(0) & ", " & DecodedArray(1) & _
		", " & DecodedArray(2) & ", " & DecodedArray(3) & ", " & DecodedArray(4) & _
		", " & DecodedArray(5) & )
	
Cast encrypt/decrypt di un array in ASP VBScript:
	set objCast128 = server.createObject("cast.cipher")
	OriginalArray = Array(1, 3, 90, 23, 66, 3)
	Key = "the Key"
	Cast128EncryptedArray = objCast128.cast128ArrayEnc(Key,OriginalArray)
	DecryptedArray = objCast128.b64ArrayDec(key, Cast128EncryptedArray)
	response.write("dati originali: " & OriginalArray(0) & ", " & OriginalArray(1) & _
		", " & OriginalArray(2) & ", " & OriginalArray(3) & ", " & OriginalArray(4) & _
		", " & OriginalArray(5) )
	response.write("dati criptati: " & Cast128EncryptedArray(0) & ", " & Cast128EncryptedArray(1) & _
		", " & Cast128EncryptedArray(2) & ", " & Cast128EncryptedArray(3) & ", " & _
		Cast128EncryptedArray(4) & ", " & Cast128EncryptedArray(5) )
	response.write("dati decriptati: " & DecryptedArray(0) & ", " & DecryptedArray(1) & _
		", " & DecryptedArray(2) & ", " & DecryptedArray(3) & _
		", " & DecryptedArray(4) & ", " & DecryptedArray(5))
	

 

4. History

1.0 Presenti i soli metodi encode e decode. Supporta la sola codifica di stringhe.
1.1 Rinominati i metodi encode e decode in cast128encode e cast128decode.
Corretto un errore di ortografia nel nome dell'interfaccia (precedentemente chiamata chipher invece di cipher)
Aggiunti i metodi per criptare/decryptare un array.
Aggiunti i metodi per codificare e decodificare dati in base64 (stringhe e array)
1.2

Aggiunta compatibilità con i tipi di dati degli oggetti di ASP: tutti gli output di tipo array sono ora compatibili con il metodo Response.BinaryWrite.
Aggiunti metodi di conversione da Array di byte a Stringa e viceversa, e da Array di interi ad Array di byte.

1.3

Questa sarà la prossima e probabilmente ultima versione:
Output del metodo cast128encode più piccolo (L'output così generato è grande circa il 50% in più rispetto all'input)

 

5. Struttura dell'output del metodo cast128encode

Il metodo cast128encode trasforma la stringa di input in un array di unsigned char. Dopo di che codifica questo array mediante base64. Nel caso in cui la stringa così ottenuta contenga un numero dispari di blocchi di 4 byte (o blocchi del base64), vengono aggiunti 4 caratteri di '=' alla fine. Ciò assicura che la stringa contenga un numero di elementi multiplo di 8. La stringa è criptata con l'algoritmo cast128. L'output viene nuovamente codificato in base64 per ottenere una stringa ASCII.
L'output così generato è grande circa il 50% in più rispetto all'input.
Nella prossima versione mi occuperò di cambiare l'algoritmo in modo da minimizzare lo spazio occupato dall'output, mantenendo in ogni caso una compatibilità con l'attuale codifica.


6. Note sul Base64

Il base64 codifica dei dati in modo tale che essi siano rappresentabili con un sottoinsieme visualizzabile dei caratteri ASCII. I caratteri usati sono in tutto 65 (64 per la rappresentazione più uno speciale) e sono i seguenti:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz0123456789+/
lo speciale carattere '=' è usato come "terminatore" in casi particolari.

 

Known Bugs

Ci sono dei problemi nell'uso dei metodi Encrypt/Decrypt dall'interno di funzioni o subrutine ASP:
il problema si presenta quando si usano i parametri passati alla funzione ASP come parametri per le chiamate ai metodi dell'oggetto CAST.
Un ringraziamento speciale a Jim Lum per aver scoperto il bug.

Un workaround è disponibile. Usate un codice del tipo:

Function Encrypt(istring,tkey)
	Dim thekey, tistring
	thekey = tkey
	tistring = istring
	Set objCast = Server.CreateObject("cast.cipher")
	EncryptNote = objCast.cast128encode(thekey, tistring)
	Set objCast = Nothing
End function

Invece che del tipo

Function Encrypt(istring,tkey)
	Set objCast = Server.CreateObject("cast.cipher")
	EncryptNote = objCast.cast128encode(tkey, istring)
	Set objCast = Nothing
End function

Se trovi un bug, per favore segnalalo via email a midori@paipai.net

 



Listed on:

Aspin.com Got Questions? askASP.com!

Midori, Paipai Networks, Apr 2001.