Prefacio
Los terminales móviles se están volviendo cada vez más populares. Durante el proceso de desarrollo, siempre encontramos escenarios en los que tenemos que lidiar con terminales móviles, como tratar con Android e iOS. Para hacer que la interacción de datos sea más segura, necesitamos cifrar los datos y transmitirla.
Este artículo compartirá con usted el cifrado y el descifrado de AES, los algoritmos de cifrado AES comunes a Android e iOS, puede integrarse directamente en sus propios proyectos, si la interfaz del servidor está escrita en Java, todo el marco es perfecto, si es una interfaz de backend escrita por .net, debe transformarlo.
Cifrado de iOS
/ *Método de cifrado */ (NSString *) AES256EncryPTWitHPlaintext: (nsString *) Plain {nsData *pLaintExt = [sencillo dataUsingEncoding: nsutf8StringEncoding]; // ´Key´ debería ser 32 bytes para AES256, será nulo, de lo contrario, Char Kyptr [KCCKEYSEAES256 1]; // Sala para Terminator (sin usar) BZero (KeyyPtr, SizeOf (KEYPTR)); // rellenar con ceros (para relleno) nsuinteger dataTalength = [Longitud de texto sin formato]; size_t buffersize = dataLength kccblocksizeAES128; void *buffer = malloc (buffersize); bZero (búfer, sizeOf (búfer)); size_t numByTesEncrypted = 0; CcCryptorStatus cryptStatus = ccCrypt (KCCENCRYPT, KCCALGORITHMAES128, KCCOPTIONPKCS7PADDING, [[NSDATA AESKEYFORPERSWORD: contraseña] bytes], KCCKEYEAES256, ivbuff /* vector de inicialización (opcional)* /, [plaactExtExt, dataTesgggy]. entrada */ buffer, buffersize,/ *output */ & numByTesEncrypted); if (cryptStatus == kccsuccess) {nsdata *ciRyptData = [nsData datawithBytesNocopy: longitud del búfer: numByTesEncrypted]; return [CiCryptData Base64Encoding]; } gratis (búfer); // libera el búfer; devolver nulo;} Descifrado de iOS
/ *Método Decrypt */ (NSString *) AES256DecryptWithCiPherText: (NSString *) Ciphertexts {nsdata *cipherdata = [nsdata datawithBase64EncodedString: cifreTexts]; // ´Key´ debería ser 32 bytes para AES256, será nulo, de lo contrario, Char Kyptr [KCCKEYSEAES256 1]; // Sala para Terminator (sin usar) BZero (KeyyPtr, SizeOf (KEYPTR)); // rellenar con ceros (para relleno) nsuinteger dataLength = [cipherdata longitud]; size_t buffersize = dataLength kccblocksizeAES128; void *buffer = malloc (buffersize); size_t numBytesDecrypted = 0; CcCryptorStatus cryptStatus = ccCrypt (kccdecrypt, kccalgorithmaes128, kccOptionPkcs7padding, [[nsdata aeskeyForPassword: contraseña] bytes], kcckeySeaes256, ivbuff,/ * vector de inicialización (opción) */ [[CIPEDATES], DataLength, / * input * / buffer, buffersize, / * output * / & numBytesDecrypted); if (cryptStatus == kccsuccess) {nsdata *ciRyptData = [nsData datawithBytesNocopy: longitud del búfer: numBytesDecrypted]; return [[[nsstring alloc] initwithData: encryptData codificación: nsutf8StringEncoding] init]; } gratis (búfer); // libera el búfer; devolver nulo;} Cifrado de Android
byte privado [] 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", "no hay soporte de cifra getinstance para" cmp); } Catch (nosuchpaddingException nspe) {log.e ("aesdemo", "no hay soporte de getinstance para relleno" cmp); } catch (InvalidKeyException e) {log.e ("aesdemo", "excepción de clave inválida"); } Catch (InvalidalgorithMParameterRexception e) {log.e ("aesdemo", "excepción de parámetro de algoritmo inválido"); } Catch (ilegalblocksizeException e) {log.e ("aesdemo", "excepción de tamaño de bloque ilegal"); } Catch (BadPaddingException e) {log.e ("aesdemo", "excepción de relleno malo"); } return null;} Descifrado de Android
byte privado [] decrypt (string cmp, secretkey sk, ivParameterspec IV, byte [] cifrado de texto) {try {cipher c = cipher.getInstance (cmp); C.Init (Cipher.Decrypt_Mode, SK, IV); return c.dofinal (cifrado de texto); } Catch (nosuchalgorithmexception nsae) {log.e ("aesdemo", "no hay soporte de cifra getinstance para" cmp); } Catch (nosuchpaddingException nspe) {log.e ("aesdemo", "no hay soporte de getinstance para relleno" cmp); } catch (InvalidKeyException e) {log.e ("aesdemo", "excepción de clave inválida"); } Catch (InvalidalgorithMParameterRexception e) {log.e ("aesdemo", "excepción de parámetro de algoritmo inválido"); } Catch (ilegalblocksizeException e) {log.e ("aesdemo", "excepción de tamaño de bloque ilegal"); } Catch (BadPaddingException e) {log.e ("aesdemo", "excepción de relleno malo"); E.PrintStackTrace (); } return null;}Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo sea útil para todos los desarrolladores. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse.