› Sviluppare funzionalita su Microsoft Office con VBA › Codici segreti con l’operatore Xor
-
AutoreArticoli
-
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/]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 )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) 🙂
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 )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
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).
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.
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 )ALLA VOCE
nella striga che ti ho postato mancano dei caratteri
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 )albatros54 wrote:ho messo fra doppi apici il segno =
Perché? il segno di uguale non dà problemi, solo quello delle virgolette 🙂
-
AutoreArticoli