Dieser Artikel enthält Nonce und Verschlüsselung, um die Implementierung privater Mitglieder in Python zu erzwingen. Er ist jedoch nicht sinnvoll, da er weniger lesbar ist und leicht beschädigt werden kann.
Sie müssen lediglich eine Verschlüsselungs-Nonce entwerfen. In Bezug auf den Verschlüsselungsmechanismus wurde der Artikel von teitei_tk vollständig aktualisiert. Insbesondere "aes_cipher.py" wurde so wie es ist im Verzeichnis gespeichert. "Pip install pycrypto" scheint jedoch einen Build-Fehler in der Windows-Umgebung zu verursachen Eine Alternative zu "pip install pycryptodome".
Private Methode
import numpy as np
from aes_cipher import AESCipher
import string, random;
#Alle Importe sind für private Methoden
class Test:
def __init__(self):
self.cipher = AESCipher(''.join([random.choice(string.ascii_letters + string.digits) for i in range(50)])) #Schlüssel erstellen, sofort registrieren
self.nonce # nonce
def caller(self):
print('Vom Anrufer_private_Rufen Sie den Angerufenen an')
self.nonce = np.random.rand() #Nonce Update
self._private_callee(self.cipher.encrypt(self.nonce)) #Verschlüsseln Sie neue Nonce und senden Sie sie an eine private Methode
def _private_callee(self, ciphered_nonce):
nonce = cipher.decrypt(ciphered_nonce) #Entschlüsseln Sie die verschlüsselte gesendete Nonce
if nonce==self.nonce:
print('Da die Nonces übereinstimmten, war der Anruf vom Anrufer wie erwartet.')
#Schreiben Sie hier die Verarbeitung
else:
print('Illegaler Anruf')
Wenn Sie "obj._private_callee (obj.cipher.encrypt (obj.nonce))" von außen ausführen, ist ein illegaler Anruf natürlich erfolgreich, daher ist dies aus Sicherheitsgründen ein guter Ort. Aber es ist unwahrscheinlich, dass Sie versehentlich eine private Methode mit so viel aufrufen. Erstens kann sogar die private Methode von Java mithilfe von Reflexion von außen aufgerufen werden. Reicht das nicht aus, um zu verhindern, dass Fremde private Methoden aufrufen?
Mit demselben Ansatz können Sie auch private Felder erstellen und Getter und Setter definieren.
Privates Feld
import numpy as np
from aes_cipher import AESCipher
import string, random;
#Alle Importe sind für private Felder
class Test:
def __init__(self):
self.cipher = AESCipher(''.join([random.choice(string.ascii_letters + string.digits) for i in range(50)])) #Schlüssel erstellen, sofort registrieren
self._private_field = self.cipher.encrypt('"Sie können im schlimmsten Fall gesehen werden", aber "Ich möchte nicht versehentlich gesehen werden"')
def setter(self, value):
self._private_field = self.cipher.encrypt(value)
def getter(self):
return self.cipher.decrypt(self._private_field)
Schließlich scheint es besser, Nonce nicht zu verschlüsseln oder einzuführen, sondern nur "Diejenigen mit" _ "am Anfang sind privat zu verhandeln!". So etwas zu erzwingen macht nicht viel Sinn, aber es bringt den Code durcheinander.
Recommended Posts