Préface
Les terminaux mobiles deviennent de plus en plus populaires. Au cours du processus de développement, nous rencontrons toujours des scénarios où nous devons faire face aux terminaux mobiles, comme traiter avec Android et iOS. Afin de rendre l'interaction des données plus sécurisée, nous devons crypter les données et les transmettre.
Cet article partagera avec vous le chiffrement et le décryptage des AES, les algorithmes de cryptage AES communs à Android et iOS, vous pouvez directement vous intégrer dans vos propres projets, si l'interface du serveur est écrite en Java, l'ensemble du framework est parfait, s'il s'agit d'une interface backend écrite par .NET, vous devez le transformer.
Cryptage iOS
/ * Méthode de chiffrement * / (nsstring *) aes256encryptwithplaintext: (nsstring *) PLAIN {nsdata * plaintext = [PLAIN DataUsingEncoding: nsutf8StringeCcoding]; // ´key´ devrait être de 32 octets pour AES256, sera nulddded autrement char keyptr [kcckeysizeaes256 1]; // Room pour Terminator (inutilisé) bzero (keyptr, sizeof (keyptr)); // Remplissez des zéros (pour le rembourrage) nsuInteger Datalngle = [Longueur en clair]; size_t buffSize = datalngle kccblockSizeaes128; void * buffer = malloc (tamponSize); bzero (tampon, sizeof (tampon)); size_t numByTesEnCrypted = 0; CcCryptOrStatus cryptstatus = cccrypt (KcCencrypt, KcCalgorithmaes128, kcCoptionpkcs7padding, [[nsdata aeskeyforpassword: mot de passe] octets], KcckeySiseaes256, ivbuff / * Vector (Initialisation (facultatif) * /, [PlainTex tampon, tamponize, / * output * / & numByTesEncrypted); if (cryptStatus == kccSuccess) {nsdata * EncryptData = [nsdata dataWithBytesNocopy: Buffer Length: numBytesEncryptepted]; retour [EncryptData Base64Encoding]; } gratuit (tampon); // libre du tampon; retour nul;} Décryptage iOS
/ * Decrypt Method * / (nsstring *) aes256DecryptWithCiPherText: (nsstring *) CipherTexts {nsdata * cipherdata = [nsdata dataWithBase64EncodedString: ciphertexts]; // ´key´ devrait être de 32 octets pour AES256, sera nulddded autrement char keyptr [kcckeysizeaes256 1]; // Room pour Terminator (inutilisé) bzero (keyptr, sizeof (keyptr)); // Remplissez des zéros (pour le rembourrage) nsuInteger Datalngle = [Cipherdata Longueur]; size_t buffSize = datalngle kccblockSizeaes128; void * buffer = malloc (tamponSize); size_t numBytesDecrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, [[NSData AESKeyForPassword:PASSWORD] bytes], kCCKeySizeAES256, ivBuff ,/* initialization vector (optional) */ [cipherData bytes], dataLength, / * entrée * / tampon, tamponize, / * output * / & numBytesDecrypted); if (cryptStatus == kccSuccess) {nsdata * EncryptData = [nsdata dataWithBytesNocopy: Buffer Length: numBytesDecrypted]; return [[[nsstring alloc] initWithData: Encoding EncryptData: nsutf8StRINGEncoding] init]; } gratuit (tampon); // libre du tampon; retour nul;} Cryptage Android
octet privé [] Encrypt (String CMP, SecretKey SK, ivParameterspec IV, Byte [] msg) {try {cipher c = cipher.getInstance (cmp); C.Init (Cipher.encpt_Mode, SK, IV); retour c.dofinal (msg); } catch (NosuchalgorithMexception nsae) {log.e ("aesdemo", "pas de prise en charge de cipher getInstance pour" cmp); } catch (nosuchpaddingException nspe) {log.e ("aesdemo", "pas de prise en charge de cipher pour le padding" cmp); } catch (invalidKeyException e) {log.e ("aesdemo", "exception de clé invalide"); } catch (invalidalgorithMParameTereXception e) {log.e ("aesdemo", "Paramètre algorithme invalide Exception"); } catch (illégalblockSizeException e) {log.e ("aesdemo", "Exception de taille de bloc illégale"); } catch (badpaddingException e) {Log.e ("aesdemo", "Bad Padding Exception"); } retourner null;} Décryptage Android
octet privé [] Decrypt (String CMP, SecretKey SK, ivParameterspec IV, byte [] CiPherText) {try {cipher c = cipher.getInstance (cmp); C.Init (cipher.decrypt_mode, SK, IV); Retour C.Dofinal (CIPherText); } catch (NosuchalgorithMexception nsae) {log.e ("aesdemo", "pas de prise en charge de cipher getInstance pour" cmp); } catch (nosuchpaddingException nspe) {log.e ("aesdemo", "pas de prise en charge de cipher pour le padding" cmp); } catch (invalidKeyException e) {log.e ("aesdemo", "exception de clé invalide"); } catch (invalidalgorithMParameTereXception e) {log.e ("aesdemo", "Paramètre algorithme invalide Exception"); } catch (illégalblockSizeException e) {log.e ("aesdemo", "Exception de taille de bloc illégale"); } catch (badpaddingException e) {Log.e ("aesdemo", "Bad Padding Exception"); e.printStackTrace (); } retourner null;}Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article sera utile à tous les développeurs. Si vous avez des questions, vous pouvez laisser un message pour communiquer.