Sviluppare funzionalita su Microsoft Office con VBA Codici segreti con l’operatore Xor

Login Registrati
Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
  • Autore
    Articoli
  • #6572 Score: 0 | Risposta

    vecchio frac
    Senior Moderator
      238 pts

      La funzioncina che presentiamo è una rivisitazione di un noto algoritmo di cifratura molto semplice, basato sull'operatore Xor. Il codice è ampiamente
      [Leggi tutto al seguente link: https://www.excelvba.it/forumexcel/codici-segreti-con-loperatore-xor/]

      #6576 Score: 0 | Risposta

      albatros54
      Moderatore
        81 pts

        ho provato la funzione e....Funziona,pero ho notato una cosa, lanciando ripetutamente le funzione con la stessa PW leggibile, mi ritornava sempre una PW criptata diversa,e dato dal fatto che la variabile "iEncoder" si inzializza ogni volta con valori random?

         

        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
        Sempre il mare, uomo libero, amerai!
        ( Charles Baudelaire )
        #6577 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          238 pts

          Certamente, hai notato giusto ed è proprio lì la forza della routine. Il processo inverso funziona sempre perchè la risultante è sempre un carattere con il suo Xor, e i deu caratteri nuovamente Xor-ati tra loro restituiscono il carattere di partenza (la risultante è lunga il doppio dell'originale perchè conserva in sè codificante e xor-codificato) 🙂

          #6578 Score: 0 | Risposta

          albatros54
          Moderatore
            81 pts

            Ho notato qualche cosa che non va.

            Ho criptato il mio nickname, tutto bene, ho copiato i vari caratteri per poi risalire al nickname in chiaro, li ho dati in pasto alla funzione ...non funziona, perche tra i caratteri criptati si trovano il segno "=" e il segno doppie virgolette  " . E un Bug ho sono io con il mio nickname a farlo andare in errore? Excel 2007 win 7

             

            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
            Sempre il mare, uomo libero, amerai!
            ( Charles Baudelaire )
            #6579 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              238 pts

              Non è un bug, il problema è delle virgolette che quando le dai in pasto a una funzione devi raddoppiarle altrimenti il parser di VBA non le interpreta (o meglio le interpreta come fine del corpo argomenti e invece vanno "escapate").

              In generale, se una funzione accetta un argomento di tipo stringa, puoi passarle qualsiasi carattere ma il carattere " deve essere raddoppiato perchè venga inteso come semplice.

              Option Explicit
              
              Function myFunc(s As String) As String
                  myFunc = s
              End Function

              In immediata il test:

              ?myfunc("topolino")
              pippo
              ?myfunc("topolino ""ama"" pluto")
              topolino "ama" pluto
              #6580 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                238 pts

                Lo dico anche se non c'entra niente, è lo stesso problema dei doppi apici nella SQL injection, tecnica che non si dovrebbe usare (meglio usare i parametri) ma è il metodo più semplice e veloce per costruire stringhe SQL da far eseguire al motore Jet di Access (o via DAO o via ADO).

                #6581 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  238 pts

                  Ho fatto un test col tuo nick (ho dovuto farne tanti per ottenere un carattere virgolette 🙂 perchè ogni volta la funzione dà un risultato diverso).

                  cipher("albatros54") = !@[7"@F'C7H:&I;HfSbV

                  e quindi

                  cipher("!@[7""@F'C7H:&I;HfSbV", 0) = albatros54

                  Dobbiamo raddopppiare quel carattere virgolette (l'ho evidenziato in grassetto, spero che si veda) perchè altrimenti VBA crede che sia finita la parte della funzione passata in argomento.

                  #6582 Score: 0 | Risposta

                  albatros54
                  Moderatore
                    81 pts

                    Non voglio mettere in dubbio quello che dici, pero non riesco a decriptare il mio nickname,ho messo fra doppi apici le virgolette, ho messo fra doppi apici il segno = manon funziona 😀 

                    prova con questa stringa

                    cipher("D%@,=YR7#Q9XO/F>P/J";0)

                     

                    Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                    Sempre il mare, uomo libero, amerai!
                    ( Charles Baudelaire )
                    #6584 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      81 pts

                      ALLA VOCE 

                      nella striga che ti ho postato mancano dei caratteri :mrgreen: 

                      sembra funzionare

                       

                      Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                      Sempre il mare, uomo libero, amerai!
                      ( Charles Baudelaire )
                      #6586 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        238 pts

                        albatros54 wrote:ho messo fra doppi apici il segno =

                        Perché? il segno di uguale non dà problemi, solo quello delle virgolette 🙂

                      Login Registrati
                      Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
                      Rispondi a: Codici segreti con l’operatore Xor
                      Gli allegati sono permessi solo ad utenti REGISTRATI
                      Le tue informazioni: