Méthodes et champs privés en python [chiffrement]

0. Résumé pour ceux qui ne veulent pas perdre de temps

Cet article incorpore nonce et cryptage pour forcer les membres privés à être implémentés en python, mais cela n'a tout simplement pas de sens car il est moins lisible et peut être facilement cassé.

1. Idée

Tout ce que vous avez à faire est de concevoir un nonce de cryptage. Concernant le mécanisme de cryptage, l'article de teitei_tk a été complètement mis à jour. En particulier, ʻaes_cipher.pya été sauvegardé dans le répertoire tel quel. Cependant,pip install pycryptosemble provoquer une erreur de construction dans l'environnement Windows, donc Une alternative àpip install pycryptodome`.

2. Mise en œuvre

Méthode privée


import numpy as np
from aes_cipher import AESCipher
import string, random;
#Toutes les importations sont pour des méthodes privées

class Test:
    def __init__(self):
        self.cipher = AESCipher(''.join([random.choice(string.ascii_letters + string.digits) for i in range(50)])) #Créez la clé, inscrivez-vous immédiatement
        self.nonce # nonce

    def caller(self):
        print('De l'appelant_private_Appeler l'appelé')
        self.nonce = np.random.rand() #mise à jour nonce
        self._private_callee(self.cipher.encrypt(self.nonce)) #Crypter le nouveau nonce et l'envoyer à une méthode privée

    def _private_callee(self, ciphered_nonce):
        nonce = cipher.decrypt(ciphered_nonce) #Décrypter le nonce crypté envoyé
        if nonce==self.nonce:
            print('Puisque les nonces correspondaient, l'appel de l'appelant était comme prévu.')
            #Écrivez le traitement ici
        else:
            print('Appel illégal')

Bien sûr, si vous faites ʻobj._private_callee (obj.cipher.encrypt (obj.nonce)) `de l'extérieur, un appel illégal réussira, donc c'est ** un bon endroit hors de question en termes de sécurité **. Mais, eh bien, il est peu probable que vous appeliez par inadvertance une méthode privée avec autant. En premier lieu, même la méthode privée de java peut être appelée de l'extérieur en utilisant la réflexion. N'est-ce pas suffisant pour empêcher des étrangers d'appeler des méthodes privées?

Vous pouvez également utiliser la même approche pour créer des champs privés et définir des getters et des setters.

Champ privé


import numpy as np
from aes_cipher import AESCipher
import string, random;
#Toutes les importations concernent des champs privés

class Test:
    def __init__(self):
        self.cipher = AESCipher(''.join([random.choice(string.ascii_letters + string.digits) for i in range(50)])) #Créez la clé, inscrivez-vous immédiatement
        self._private_field = self.cipher.encrypt('"Vous pouvez être vu au pire" mais "Je ne veux pas être vu par inadvertance"')

    def setter(self, value):
        self._private_field = self.cipher.encrypt(value)

    def getter(self):
        return self.cipher.decrypt(self._private_field)
    

2. Conclusion

Après tout, il semble préférable de ne pas crypter ou d'introduire du nonce, mais simplement de négocier "Ceux avec _ au début sont privés!". Forcer quelque chose comme ça n'a pas beaucoup de sens, mais cela dérange le code.

Recommended Posts

Méthodes et champs privés en python [chiffrement]
Méthode privée en python
Chiffrement et déchiffrement avec Python
Méthodes d'objet chaîne en Python
Pile et file d'attente en Python
Unittest et CI en Python
Appeler dynamiquement des méthodes en Python
Pas de cryptage AES Salt en Python
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Différence entre == et est en python
Afficher les photos en Python et html
Algorithme de tri et implémentation en Python
Manipuler des fichiers et des dossiers en Python
À propos de Python et Cython dtype
Vérifiez et déplacez le répertoire en Python
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Hashing de données en R et Python
Synthèse de fonctions et application en Python
Exporter et exporter des fichiers en Python
Définir dynamiquement des fonctions (méthodes) en Python
Inverser le pseudonyme plat et le katakana en Python2.7
Lire et écrire du texte en Python
[GUI en Python] Menu PyQt5 et barre d'outils-
Classes et instances Python, méthodes d'instance
Créer et lire des paquets de messages en Python
Chevauchement d'expressions régulières en Python et Java
Différence d'authenticité entre Python et JavaScript
Les modules et packages en Python sont des "espaces de noms"
Évitez les boucles imbriquées en PHP et Python
Modulation et démodulation AM avec Python Partie 2
différence entre les instructions (instructions) et les expressions (expressions) en Python
Valeurs authentiques et vecteurs propres: Algèbre linéaire en Python <7>
Module d'implémentation de file d'attente et Python "deque"
Graphique à lignes pliées et ligne d'échelle en python
Implémenter le filtre FIR en langage Python et C
Différences entre la syntaxe Python et Java
Vérifier et recevoir le port série en Python (vérification du port)
Rechercher et lire des vidéos YouTube avec Python
Différence entre @classmethod et @staticmethod en Python
Différence entre append et + = dans la liste Python
Différence entre non local et global en Python
Ecrire le fichier O_SYNC en C et Python
Gérer les "années et mois" en Python
Lire et écrire des fichiers JSON avec Python
Représentez facilement des données graphiques dans le shell et Python
Rechercher et vérifier la matrice inverse en Python
Indépendance et base linéaires: Algèbre linéaire en Python <6>
Appelez sudo en Python et mot de passe à saisie automatique
Résumé des méthodes intégrées, etc. de la liste Python
Différences de multithreading entre Python et Jython
Importation de modules et gestion des exceptions en python
Comment utiliser is et == en Python
Projet Euler # 1 "Multiple de 3 et 5" en Python
Quadtree en Python --2
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Organisez les modules et les packages Python dans le désordre
Géocodage en python
SendKeys en Python
Qu'est-ce que la «programmation fonctionnelle» et «orientée objet»? Édition Python