Le chiffrement AES en swift
Je suis en train de mettre en œuvre le chiffrement AES en swift. Le chiffrement déchiffrement pour Android et C# fonctionne correctement. J'ai besoin de la mettre en œuvre rapide. C'est code actuel pour android et C# est suivi par cette.
J'ai essayé d'utiliser
Mais aucun de ce travail. Quand j'envoie la chaîne cryptée sur le serveur, il n'a pas été déchiffrée.
Toute aide sera appréciée
Il suffit de comparer la sortie de travail mise en œuvre. La norme des vecteurs de test pour l'AES dans les différents modes de fonctionnement sont disponibles.
J'ai essayé de comparer la valeur chiffrée, mais ce n'est pas de correspondance. Je n'ai pas accès à l'android code, donc je ne peux pas le corriger. Je viens de recevoir ce lien comme une référence que j'avais déjà ajouté en question
Ensuite, regardez les paramètres d'entrée. Vous aurez un 16 bits bloc de texte en clair, un 16-20 octets de la clé (selon l'AES-128, AES-256 .etc variante) et un vecteur d'initialisation IV. Tous les trois doivent correspondre, pour chaque bloc. Vous devez également vous assurer que le rembourrage protocole est le même entre les versions.
Je suis seulement
Vous devez utiliser le même mode de remplissage de décrypter et de les chiffrer. Si votre API ne prennent pas en charge, vous aurez à mettre en œuvre vous-même. Cela peut impliquer unpadding le mauvais format, puis repadding dans le format correct. Encore une fois, vous trouverez des vecteurs de test pour vérifier qu'elle fonctionne correctement à chaque étape.
J'ai essayé de comparer la valeur chiffrée, mais ce n'est pas de correspondance. Je n'ai pas accès à l'android code, donc je ne peux pas le corriger. Je viens de recevoir ce lien comme une référence que j'avais déjà ajouté en question
Ensuite, regardez les paramètres d'entrée. Vous aurez un 16 bits bloc de texte en clair, un 16-20 octets de la clé (selon l'AES-128, AES-256 .etc variante) et un vecteur d'initialisation IV. Tous les trois doivent correspondre, pour chaque bloc. Vous devez également vous assurer que le rembourrage protocole est le même entre les versions.
Je suis seulement
kCCOptionPKCS7Padding
. Comment puis-je le mettre à PKCS5
de remplissage avec le mode CBC? Vérifié mais n'ai pas trouvé de solution pour ça aussiVous devez utiliser le même mode de remplissage de décrypter et de les chiffrer. Si votre API ne prennent pas en charge, vous aurez à mettre en œuvre vous-même. Cela peut impliquer unpadding le mauvais format, puis repadding dans le format correct. Encore une fois, vous trouverez des vecteurs de test pour vérifier qu'elle fonctionne correctement à chaque étape.
OriginalL'auteur Ankita Shah | 2016-06-07
Vous devez vous connecter pour publier un commentaire.
Assurez-vous d'utiliser les mêmes paramètres qui semblent être AES avec le mode CBC avec iv,
PKCS5Padding
(en fait PKCS#7) le rembourrage et un de 16 octets (128 bits).PKCS#5 rembourrage et PKCS#7 rembourrage sont essentiellement les mêmes, parfois pour des raisons historiques PKCS#5 rembourrage est spécifié pour une utilisation avec AES, mais le remplissage est PKCS#7.
Assurez-vous que les codages de la clé, iv et de données chiffrées correspondent à tous. Hex dump sur les deux plates-formes pour s'assurer qu'ils sont identiques. Les fonctions de chiffrement ne sont pas difficiles à utiliser, si tous les paramètres d'entrée sont corrects, la sortie sera correct.
De le rendre plus sûr le iv devrait être octets aléatoires et ajouté aux données chiffrées pour une utilisation lors du déchiffrement.
La de la Croix-plate-forme AES chiffrement utilise une clé de 256 bits, donc ne fonctionnera pas comme-est.
Exemple:
De sortie:
Exemple de pris fin section documentation:
Chiffrement AES en mode CBC avec un hasard IV (Swift 3+)
Le iv est le préfixe pour les données chiffrées
aesCBC128Encrypt
permettra de créer un hasard IV et le préfixe pour le code crypté.aesCBC128Decrypt
utilisera le préfixe IV lors du déchiffrement.Entrées sont les données et les clés sont des objets de Données. Si une forme codée comme Base64 si nécessaire, convertir et/ou à partir de l'appel de la méthode.
La clé doit être exactement de 128 bits (16 octets), 192 bits (24 octets) ou 256 bits (32 octets) de longueur. Si une autre taille de clé est utilisé, une erreur sera levée.
Le remplissage PKCS#7 est définie par défaut.
Cet exemple requiert Commune Crypto
Il est nécessaire d'avoir une transition en-tête pour le projet:
#import <CommonCrypto/CommonCrypto.h>
Ajouter le
Security.framework
pour le projet.C'est un exemple, pas de code de production.
Exemple d'utilisation:
Exemple De Sortie:
Notes:
Un problème typique avec le mode CBC exemple de code est qu'il laisse la création et le partage de l'aléatoire IV de l'utilisateur. Cet exemple inclut la génération de la IV, précédé des données chiffrées et utilise le préfixe IV lors du déchiffrement. Cela évite à l'utilisateur occasionnel de détails qui sont nécessaires pour En mode CBC.
Pour la sécurité des données chiffrées devraient aussi avoir une authentification, cet exemple de code ne prévoit pas que, pour être petit et permettent une meilleure interopérabilité pour les autres plateformes.
Aussi défaut de dérivation de clé de la clé à partir d'un mot de passe, il est suggéré que PBKDF2 être utilisée est le texte les mots de passe sont utilisés comme matériel de chiffrement.
Robuste prêt pour la production plate-forme multi-code de cryptage voir RNCryptor.
Ajout de l'exemple de code de réponse.
s'il vous plaît aider. Je veux le chiffrement de la Chaîne. J'ai essayé de les convertir [UInt8] à la Chaîne, mais il est de retour nul. S'il vous plaît aider. Comment puis-je obtenir chiffré de la chaîne de valeur
Pas tous les octets sont représentable comme les caractères imprimables et la plupart ne sont pas représentable sous forme de caractères unicode. Le chiffrement des données de fonctionnement et la sortie est essentiellement aléatoire octets de 8 bits et en tant que tel ne sera pas représentable directement en tant que chaîne de caractères. La réponse est de convertir la cryptés la sortie d'un codage différent, en Base64 et hexadécimal sont les codages et sur le déchiffrement de convertir la représentation de chaîne de retour à
[Uint8]
.Son travaille également dans swift 4. Les réservoirs...
OriginalL'auteur zaph
Swift 4.2
J'ai refait @ingconti le code.
Utiliser comme cette
Résultats
OriginalL'auteur Den
mes deux cents:
swift 4 /xcode 9 extension de Données:
kCCKeySizeAES128
dans le code. En s'appuyant sur les sans-papiers clé de l'extension ne doit pas être fait. 2. C'est un exemple de la accepté de répondre enveloppé dans une extension avec l'attribution. Mais il est agréable de voir que @ingconti a utiliser mon code.OriginalL'auteur ingconti
J'ai utilisé CryptoSwift.
Première fois que j'ai installer cryptoSwift dans le fichier pod. Alors de mon point de vue contrôleur, j'ai importer CryptoSwift.
Voici le code que j'ai utilisé:
Puis, à l'aide de Chaîne d'extension:
Dans ce que je n'ai pas utilisé iv et chiffré.toBase64() pour chiffrer comme
result = encrypted.toBase64()!
en place deresult = encrypted.toStringHex()!
de chiffrementet similaire dans le déchiffrement
let decrypted = try aes.decrypt(Array(base64: encrypted))
en place delet decrypted = try aes.decrypt(Array(Hex: encrypted))
Erreur : "le Type "BlockMode' est pas membre de 'BCE' "
Comment avez-vous réussi à le faire sans iV ?
laissez-aes = essayer! AES(key: clé, blockMode: .De la BCE, rembourrage: .pkcs5) dans ce cas, il n'est pas nécessaire de iv. et de vérifier si vous avez installer pod "CryptoSwift' dans votre pod ou pas. Et si vous avez fait cela, puis les importer CryptoSwift dans votre fichier. Cette chose que le travail pour moi..
Je ne comprends pas pourquoi l'ajout d'un Pod (généralement gousses désordre des projets de l'ajout d'un espace de travail..) lors de l'30 lignes à faire le travail. 🙂
OriginalL'auteur Ayush Bansal
Trouvé une belle bibliothèque nommée RNCryptor mise en œuvre rapide de la langue pour l'AES chiffrement/déchiffrement.
Installation peut être faite avec Cocoapods ou de Carthage.
Voici un exemple de code pour le chiffrement et le déchiffrement.
OriginalL'auteur Alex Andrews
Pour quelqu'un qui ne peut pas transformer tableau d'octets en une Chaîne de caractères
C'est mon exemple de chaîne d'extension
OriginalL'auteur Khemmachart Chutapetch