Crittografia di fogli Excel: un bug sanato
Nell’articolo “Crittografia personale avanzata di fogli Excel” pubblicato sul mio blog in Shareoffice al link seguente
http://blog.shareoffice.it/giannigiaccaglini/articles/9983.aspx
ho per distrazione commesso un errore idiota, segnalatomi da un visitatore, da cui è afflitto il modello CriptografLaborAv.xls. Meglio tardi che mai. Ho corretto l’uno e l’altro e adesso il modello emendato si lascia scaricare da
http://www.giannigiaccaglini.it/download/CriptografLaborAv.xls
Dov’era il bug
In sostanza affliggeva la funzione (basilare, ahimè) CriptStr che falliva con le cifre 9 e 0 (zero). Ci ho messo una pezza che rimedia al difetto, anche se non è troppo bella. Appena ho tempo (quando? mah!) produrrò una versione più elegante. Per adesso ecco qua:
Function CriptStr(ByVal Str As String, Cript As Boolean, EstNum As Boolean, IndArr As Integer) As String
If Str = "" Then Exit Function
Dim i As Integer, L As Integer, m As Integer
'Trattamento cifre numeriche: restano TALI!
Dim Correz As Integer, Car As String
L = Len(Str)
If L = 1 Then
If Cript Then
CriptStr = IIf(Str < 9, Str + 1, 0)
Else
CriptStr = IIf(Str > 0, Str - 1, 9)
End If
Exit Function
End If
If EstNum Then
For i = 1 To L
k = k + 1 'La translitter.ne delle cifre
'è sistematicamente progressiva (un criterio come un altro...)
Correz = k Mod 9 - 1
Car = Mid(Str, i, 1)
If Not (Car = "," Or Car = ".") Then
If Cript Then
Car = Car + Correz
If Car >= 9 Then Car = Car - 9
Else
Car = Car - Correz
If Car <= 0 Then Car = Car + 9
End If
End If
Mid(Str, i, 1) = Car
Next
CriptStr = Str
Exit Function
End If
Dim NumAsc As Integer
VettChiavi = Array(Array(43, 12, 5, 14, 21, 33, 124, 3, 5, 89, 65), _
Array(35, 27, 7, 5, 45, 33, 32, 47, 65, 33, 42), _
Array(24, 12, 75, 48, 12, 68, 4, 5, 12, 35, 69))
m = UBound(VettChiavi(IndArr))
If k >= m Then k = 0 Else k = k + 1
For i = 1 To L
Correz = VettChiavi(IndArr)(k) + (L Mod 256)
If Not Cript Then Correz = -Correz
NumAsc = Asc(Mid(Str, i, 1)) + Correz
If Cript Then
If NumAsc > 255 Then NumAsc = NumAsc - 255
Else
If NumAsc < 0 Then NumAsc = NumAsc + 255
End If
Car = Chr(NumAsc)
Mid(Str, i, 1) = Car
If k = m Then k = 0 Else k = k + 1
Next
CriptStr = Str
End Function
Se qualcuno trova di meglio…
Penso che comunque, a vecchi come a nuovi visitatori interessati al tema, convenga rileggersi l’articolo (emendato), come ripeto al seguente URL
http://blog.shareoffice.it/giannigiaccaglini/articles/9983.aspx
?>