Maison >développement back-end >tutoriel php >Mécanisme de cryptage AES/RSA
Pendant la communication HTTP entre le serveur et le terminal, les paquets sont souvent capturés par le réseau. , décompilation (Android outil de décompilation APK) et autres technologies pour obtenir l'adresse et les paramètres de l' interface de communication HTTP afin d'assurer la sécurité du. informations, nous utilisons la combinaison AES+RSA. Méthode pour crypter et déchiffrer les paramètres de l'interface
1 À propos du mécanisme de cryptage RSA : la clé publique est utilisée pour crypter les données et la clé privée est utilisée pour déchiffrer. les données. La clé publique et la clé privée sont générées en même temps, correspondance biunivoque. Par exemple : A a une clé publique et B a une clé publique et une clé privée. avec la clé publique, B peut le déchiffrer avec la clé privée et la clé publique. >
2. Le cryptage AES est également appelé cryptage symétrique : après que A ait utilisé le mot de passe pour crypter les données en AES, B utilise le même mot de passe pour le décrypter en AES. le texte chiffréattributs pertinents de la clé (nom de l'entreprise, email, etc. .) dans le terminal, puis générez la clé publique et la clé privée sous l'adresse actuelle du terminal. Il y a 7 fichiers au total (voir le lien développé en annexe pour savoir comment utiliser les 7 fichiers 2. À l'heure actuelle, on suppose que le client Android possède la clé publique Public
Keyet que le serveur possède la clé publique et la clé privée PrivateKey 3. Android envoie une requête au serveur : Android génère aléatoirement un mot de passe aléatoire Byte[], en supposant RandomKey="123456", via l'algorithme AES, pour les données
Jsonà utiliser pour le cryptage 4. Mais pour le moment, le serveur ne sait pas quelle est la RandomKey du client, il doit donc transmettre la Randomkey au serveur en même temps, sinon le serveur ne peut pas décrypter les données Json via AES. Mais si la demande est envoyée directement, La RandomKey sera exposée, donc la RandomKey doit être chiffrée de manière irréversible avec RSA.
5 Android utilisera RandomKey pour les données Json cryptées AES et PublicKey pour les données RandomKey cryptées RSA vers le serveur via HTTP. .
6. Le serveur reçoit les données Json cryptées par AES et les données RandomKey cryptées par Rsa
7 Le serveur déchiffre la RandomKey cryptée à l'aide de la clé privée générée. par Android.
8. Utilisez la RandomKey originale pour effectuer le déchiffrement symétrique AES des données Json cryptées. À ce stade, les données Json originales envoyées du côté Android ont été obtenues. Effectuez des opérations commerciales régulières sur le serveur, puis chiffrez les données renvoyées avec AES via RandomKey du côté Android, puis la réponse est renvoyée.
9. Une fois que le terminal Android a reçu les données de réponse, il peut directement effectuer le décryptage AES à l'aide de la RandomKey générée localement.
Vous pouvez consulter l'organigramme détaillé ci-dessous.
Organigramme de transfert de données HTTPS client-serveur
: 1 Au cours du processus de développement proprement dit, il a été constaté que RSA et AES ont des normes de génération de texte chiffré différentes et sont incompatibles avec IOS. IOS nécessite une clé publique différente dans l'algorithme RSA que JAVA. Pour des solutions détaillées, veuillez consulter :
2. Le cryptage AES ne peut pas utiliser de clés dépassant 128 octets, car les versions supérieures à jdk1.7 ne prennent pas en charge les clés dépassant 128 octets.
Résumé : À partir d'un test de performances, l'ensemble du client, depuis l'envoi des données cryptées jusqu'au déchiffrement et à l'obtention des données originales renvoyées, ne dépasse pas
300ms (test de transmission des serveurs Iphone4 et Centos Java). Ce plan n'utilise pas TOKEN, mais il pourra être utilisé à l'avenir. La façon de mettre à jour la clé publique doit également continuer à être améliorée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!