Il blog di Gianni Giaccaglini

Blog su VBA e VSTO
Gianni Giaccaglini

My Links

News

NB - V. anche gli ARTICOLI (in fondo a questa barra)
Solo quesiti validi a: giannigiac@tin.it
Il mio nuovo libro


La mia nipotina ELISA

Foto con dedica a ME di
Bill Gates giovanissimo
nei mitici anni 80!

Categorie Post

Categorie Articoli

Archivio

Immagini

Blog Stats

Crittografia di fogli Excel: un bug sanato

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

?>

posted on sabato 26 dicembre 2009 16.28