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é.
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`.
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)
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