Private Methoden und Felder in Python [Verschlüsselung]

0. Zusammenfassung für diejenigen, die keine Zeit verschwenden möchten

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.

1. Idee

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".

2. Implementierung

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)
    

2. Fazit

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

Private Methoden und Felder in Python [Verschlüsselung]
Private Methode in Python
Ver- und Entschlüsselung mit Python
String-Objektmethoden in Python
Stapel und Warteschlange in Python
Unittest und CI in Python
Rufen Sie Methoden in Python dynamisch auf
Keine Salt-AES-Verschlüsselung in Python
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Unterschied zwischen == und ist in Python
Zeigen Sie Fotos in Python und HTML an
Sortieralgorithmus und Implementierung in Python
Bearbeiten Sie Dateien und Ordner in Python
Über Python und Cython dtype
Überprüfen und verschieben Sie das Verzeichnis in Python
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Hashing von Daten in R und Python
Funktionssynthese und Anwendung in Python
Exportieren und Ausgeben von Dateien in Python
Definieren Sie Funktionen (Methoden) in Python dynamisch
Reverse Flat Pseudonym und Katakana in Python2.7
Lesen und Schreiben von Text in Python
[GUI in Python] PyQt5-Menü und Symbolleiste-
Python-Klassen und -Instanzen, Instanzmethoden
Erstellen und lesen Sie Messagepacks in Python
Überlappende reguläre Ausdrücke in Python und Java
Unterschied in der Authentizität zwischen Python und JavaScript
Module und Pakete in Python sind "Namespaces"
Vermeiden Sie verschachtelte Schleifen in PHP und Python
AM-Modulation und Demodulation mit Python Part 2
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Echte Werte und Eigenvektoren: Lineare Algebra in Python <7>
Warteschlangen- und Python-Implementierungsmodul "deque"
Gefaltetes Liniendiagramm und Skalierungslinie in Python
Implementieren Sie den FIR-Filter in Python und C.
Unterschiede zwischen Python- und Java-Syntax
Überprüfen und empfangen Sie die serielle Schnittstelle in Python (Portprüfung)
Suchen und spielen Sie YouTube-Videos mit Python
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Schreiben Sie die O_SYNC-Datei in C und Python
Umgang mit "Jahren und Monaten" in Python
Lesen und schreiben Sie JSON-Dateien mit Python
Zeichnen Sie Daten einfach in Shell und Python
Suchen und überprüfen Sie die inverse Matrix in Python
Lineare Unabhängigkeit und Basis: Lineare Algebra in Python <6>
Rufen Sie sudo in Python auf und füllen Sie das Passwort automatisch aus
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Unterschiede in der Multithread-Verarbeitung zwischen Python und Jython
Modulimport und Ausnahmebehandlung in Python
Verwendung ist und == in Python
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Quadtree in Python --2
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Organisieren Sie Python-Module und -Pakete in einem Chaos
Geokodierung in Python
SendKeys in Python
Was ist "funktionale Programmierung" und "objektorientiert"? Python Edition