Vorwort
Mobile Terminals werden immer beliebter. Während des Entwicklungsprozesses stoßen wir immer auf Szenarien, in denen wir uns mit mobilen Terminals wie Android und iOS befassen müssen. Um die Dateninteraktion sicherer zu machen, müssen wir die Daten verschlüsseln und übertragen.
In diesem Artikel wird die Verschlüsselung und Entschlüsselung von AES, die AES -Verschlüsselungsalgorithmen, die bei Android und iOS gemeinsam sind, in Ihre eigenen Projekte integrieren. Wenn die Serverschnittstelle in Java geschrieben ist, ist das gesamte Framework perfekt.
IOS -Verschlüsselung
/ *Verschlüsselungsmethode */ (nsstring *) aes256encryptwithplainText: (nsstring *) plain {nsdata *plainText = [Plain DatauSecoding: nsutf8StringCodierung]; // ´key 'sollte 32 Bytes für AES256 sein, null-padded ansonsten char keyptr [kcckeySizeaes256 1]; // Raum für Terminator (unbenutzt) bzero (tastePtr, sizeof (keyptr)); // Füllen Sie mit Nullen (für die Polsterung) nsuinteger datalength = [PlainText Länge]; size_t bufferSize = datalength kccblocksizeaes128; void *buffer = malloc (buffersize); bzero (Puffer, sizeof (puffer)); size_t numbyteScrypted = 0; CccryptorStatus cryptstatus = cccrypt (kcccrypt, kccalgorithmaes128, kccoptionpkcs7padding, [nsdata aeskeyForpassword: Passwort] Bytes], KCCKEYSEAES256, IVBUFF / * INITIVICIATION Vektor (optional) * / * /optional) * /, [Optional) * /, [ /optional) * /, [ /Optional) * /, [ /Optional) * /, [ /Optional) * /, [ /Optional) * /, [ /Optional) * /, [ /Optional) * /, [ /Optional) * /, [ /Optional) * /, [ /Optional). puffer, puffersize, / * output * / & numbyTeScrypted); if (cryptstatus == kccsuccess) {nsdata *Encryptdata = [nsdata datawithBytesnocopy: Pufferlänge: numbyteScrypted]; return [EncryptData Base64Coding]; } Free (Puffer); // den Puffer befreien; NIL NIL;} zurückgeben IOS entschlüsselt
/ *Decrypt methode */ (nsstring *) aes256DecryptWithCiPHerText: (nsString *) CiphERTexte {nsdata *cipherdata = [nsdata datawithbase64EncodeString: cipHerTexts]; // ´key 'sollte 32 Bytes für AES256 sein, null-padded ansonsten char keyptr [kcckeySizeaes256 1]; // Raum für Terminator (unbenutzt) bzero (tastePtr, sizeof (keyptr)); // Füllen Sie mit Nullen (für die Polsterung) nsuinteger datalength = [cipherdata länge]; size_t bufferSize = datalength kccblocksizeaes128; void *buffer = malloc (buffersize); size_t numbytesdecrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, [[NSData AESKeyForPassword:PASSWORD] bytes], kCCKeySizeAES256, ivBuff ,/* initialization vector (optional) */ [cipherData bytes], dataLength, /* input */ puffer, puffersize,/ *output */ & numbytesdecrypted); if (cryptstatus == kccsuccess) {nsdata *Encryptdata = [nsdata datawithBytesnocopy: Pufferlänge: numbytesdecrypted]; return [[[nsstring alloc] initWithData: Encryptdata codieren: nsutf8stringencoding] init]; } Free (Puffer); // den Puffer befreien; NIL NIL;} zurückgeben Android -Verschlüsselung
private byte [] Encrypt (String CMP, SecretKey SK, ivparameterspec iv, byte [] msg) {try {cipher c = cipher.getInstance (CMP); C.Init (Cipher.encrypt_mode, SK, IV); Return C.Dofinal (MSG); } catch (nosuchalgorithmException nSae) {log.e ("Aesdemo", "Keine Chiffre, Getinstance -Unterstützung für" CMP); } catch (NoSuchpaddingException nspe) {log.e ("Aesdemo", "keine Verschlüsselung GetInstance -Unterstützung für das Polster" cmp); } catch (InvalyKeyException e) {log.e ("Aesdemo", "InvaliD Key Exception"); } catch (InvalidAlgorithmarameterexception e) {log.e ("Aesdemo", "Ungültiger Algorithmus -Parameterausnahme"); } catch (illegalblocksizeexception e) {log.e ("Aesdemo", "illegale Blockgröße Ausnahme"); } catch (badpaddingException e) {log.e ("Aesdemo", "Bad Padding Exception"); } return null;} Android Entschlüsselung
private byte [] entschlüsselt (String cmp, SecretKey SK, ivparameterspec IV, Byte [] CiphERText) {try {cipher c = cipher.getInstance (cmp); C.init (Cipher.Decrypt_mode, SK, IV); Rückkehr c.dofinal (CipheText); } catch (nosuchalgorithmException nSae) {log.e ("Aesdemo", "Keine Chiffre, Getinstance -Unterstützung für" CMP); } catch (NoSuchpaddingException nspe) {log.e ("Aesdemo", "keine Verschlüsselung GetInstance -Unterstützung für das Polster" cmp); } catch (InvalyKeyException e) {log.e ("Aesdemo", "InvaliD Key Exception"); } catch (InvalidAlgorithmarameterexception e) {log.e ("Aesdemo", "Ungültiger Algorithmus -Parameterausnahme"); } catch (illegalblocksizeexception e) {log.e ("Aesdemo", "illegale Blockgröße Ausnahme"); } catch (badpaddingException e) {log.e ("Aesdemo", "Bad Padding Exception"); E. printstacktrace (); } return null;}Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, der Inhalt dieses Artikels wird allen Entwicklern hilfreich sein. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen.