Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[Excel] Shuffle - reverse Shuffle
#1
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:

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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste