Hallo,
vor mehr als hundert Jahren haben Fisher-Yates einen Algorithmus für ein zufälliges Shuttle und die Rückrechnung auf die Original-Liste entwickelt.
Für mehrere Programmiersprachen sind Beispielcodes auf
https[:]//stackoverflow.com/questions/3541378/reversible-shuffle-algorithm-using-a-key
Ein Umsetzung in VBA ist:
Nutzung:
In "Sub Start()" wird ein String erstellt und zuerst mit den rotierten Buchstaben im Debug-Fenster ausgegeben. Zur Kontrolle wird auch die Rückrechnung gezeigt.
Braucht man das?
Nein, nicht unbedingt, um in VBA einen String zu verschleiern ist vermutlich XOR einfacher.
Aber im Rahmen der "digitalen Selbstverteidigung" ist es eine der genutzten Varianten, wie Base64 oder Zeichen als Hexadezimal (auch eine andere Basis möglich) darzustellen.
mfg
vor mehr als hundert Jahren haben Fisher-Yates einen Algorithmus für ein zufälliges Shuttle und die Rückrechnung auf die Original-Liste entwickelt.
Für mehrere Programmiersprachen sind Beispielcodes auf
https[:]//stackoverflow.com/questions/3541378/reversible-shuffle-algorithm-using-a-key
Ein Umsetzung in VBA ist:
Code:
' https://stackoverflow.com/questions/3541378/reversible-shuffle-algorithm-using-a-key
Sub Start()
Dim Tx As String, enc As String, dec As String
Tx = "This is the message"
enc = Shuffle(Tx)
dec = deShuffle(enc)
Debug.Print enc
Debug.Print dec
End Sub
Function Shuffle(ByVal Tx As String) As String
Dim Size As Integer, Char, i As Integer, Ar, n As Integer
Dim tmp As String
Size = Len(Tx)
ReDim Char(Size) As String
For i = 1 To Size: Char(i - 1) = Mid(Tx, i, 1): Next i
Ar = iRND(Size, 9)
For i = Size - 1 To 0 Step -1
n = Ar(Size - 1 - i)
tmp = Char(i)
Char(i) = Char(n)
Char(n) = tmp
Next i
Shuffle = Join(Char, "")
End Function
Function deShuffle(ByVal Tx As String) As String
Dim Size As Integer, Char, i As Integer, Ar, n As Integer
Dim tmp As String
Size = Len(Tx)
ReDim Char(Size) As String
For i = 1 To Size: Char(i - 1) = Mid(Tx, i, 1): Next i
Ar = iRND(Size, 9)
For i = 0 To Size - 1
n = Ar(Size - i - 1)
tmp = Char(i)
Char(i) = Char(n)
Char(n) = tmp
Next i
deShuffle = Join(Char, "")
End Function
Function iRND(ByVal Size As Integer, key As Integer) As Variant
Dim rd As Integer, i As Integer, Ar
Rnd (-1)
Randomize (-key)
ReDim Ar(Size - 1) As Integer
For i = Size - 1 To 1 Step -1
Ar(Size - 1 - i) = Size * Rnd
Next i
iRND = Ar
End Function
Nutzung:
In "Sub Start()" wird ein String erstellt und zuerst mit den rotierten Buchstaben im Debug-Fenster ausgegeben. Zur Kontrolle wird auch die Rückrechnung gezeigt.
Braucht man das?
Nein, nicht unbedingt, um in VBA einen String zu verschleiern ist vermutlich XOR einfacher.
Aber im Rahmen der "digitalen Selbstverteidigung" ist es eine der genutzten Varianten, wie Base64 oder Zeichen als Hexadezimal (auch eine andere Basis möglich) darzustellen.
mfg