Methode zur anonymisieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fischer-klaus3
User
Beiträge: 27
Registriert: Donnerstag 17. September 2020, 08:07

Hallo,

ich habe ein Dataframe mit Studentenname und Studentenid. Ich würde gerne auf Basis den Studentenname die ID anonymisieren.
Die hash() Funktion eignet sich ja leider nicht dafür. Gibt es irgendeine Methode die Studentenid anonymisieren und eine Methode die die anonymisierte Studentenid wieder zurück bringen?

Es sollte ungefähr so aussehen

Bild

Was ich bereits habe:

Code: Alles auswählen

import pandas as pd

d = {'Student': ['abc1', 'abc1'], 'Studendid': ['abc1', 'abc2']}
df = pd.DataFrame(data=d)

d1 = {x: hash(x) for x in df['Student']}
d2 = {v:k for k, v in d1.items()}

df['Studendid']= df['Student'].map(d1)
df['orig']= df['Studendid'].map(d2)
print (df)
Sirius3
User
Beiträge: 17759
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst nicht anonymisieren sondern pseudonymisieren. Solange da eine Rückwandlung möglich sein muß, ist das aber auch nur eine Trennung von datenschutzrelevanten Daten und nicht-datenschutzrelevanten Daten.
Und die Verbindung wird über die ID ergestellt, nur dass derjenige, der die Daten verarbeitet keinen Zugriff auf die Tabelle mit den Studentennamen hat; oder falls die ID öffentlich bekannt ist noch eine weitere Spalte mit einer Pseudo-ID, denn dann kannst Du über diese Tabelle ID in Pseudo-ID umwandeln und umgekehrt.
fischer-klaus3
User
Beiträge: 27
Registriert: Donnerstag 17. September 2020, 08:07

@Sirius3 danke, genau das ist es wo nach ich Suche! Vielen Dank. :) Kennst du dazu eine gute Library ?
fischer-klaus3
User
Beiträge: 27
Registriert: Donnerstag 17. September 2020, 08:07

@Sirius3 Habe was gefunden. Könntest du mir noch dabei helfen, wie den Studenten in encode eingebe und als key die Studentenid?
So wie ich ungefähr, oben gemacht habe nur mit dieser Methode?

Code: Alles auswählen

def encode(key, string):
    encoded_chars = []
    for i in range(len(string)):
        key_c = key[i % len(key)]
        encoded_c = chr(ord(string[i]) + ord(key_c) % 256)
        encoded_chars.append(encoded_c)
    encoded_string = ''.join(encoded_chars)
    return encoded_string

def decode(key, string):
    encoded_chars = []
    for i in range(len(string)):
        key_c = key[i % len(key)]
        encoded_c = chr((ord(string[i]) - ord(key_c) + 256) % 256)
        encoded_chars.append(encoded_c)
    encoded_string = ''.join(encoded_chars)
    return encoded_string

e = encode('a key', 'a message')
d = decode('a key', e)
print([e])
print([d])
Habe es damit versucht, wie schaffe ich nun auch wieder zu codieren/ decodieren?

Code: Alles auswählen

d = {'Student': ['abc1', 'abc1'], 'Studendid': ['1', '2']}
df = pd.DataFrame(data=d)

d1 = {x: encode(x,j) for x,j in zip(df['Studendid'],df['Student'])}
d2 = {v:k for k, v in d1.items()}

df['Student']= df['Studendid'].map(d1)
df['orig']= df['Studendid'].map(d2)
print (df)


d1 = {x: decode(j,x) for x,j in zip(df['Student'],df['Studendid'])}
d2 = {v:k for k, v in d1.items()}

df['Studendid']= df['Student'].map(d1)
print (df)
Sirius3
User
Beiträge: 17759
Registriert: Sonntag 21. Oktober 2012, 17:20

Nein, bei pseudonymisierten Daten muß die Kennung wirklich zufällig sein, man darf nicht irgendwie wieder zurückrechnen können.
Antworten