Prefácio
Os terminais móveis estão se tornando cada vez mais populares. Durante o processo de desenvolvimento, sempre encontramos cenários em que temos que lidar com terminais móveis, como lidar com Android e iOS. Para tornar a interação de dados mais segura, precisamos criptografar os dados e transmiti -los.
Este artigo compartilhará com você a criptografia e a descriptografia dos AES, os algoritmos de criptografia AES comuns ao Android e iOS, você pode se integrar diretamente aos seus próprios projetos, se a interface do servidor for escrita em Java, toda a estrutura for perfeita, se for uma interface de back -end.
Criptografia iOS
/ *Método de criptografia */ (NSSTRING *) AES256ENCRYPTWITHPLAINTEXT: (NSSTRING *) simples {NSDATA *PLAYTEXT = [PLAYUSUSINGENCODING: NSUTF8StringEncoding]; // ´Key 'deve ser de 32 bytes para AES256, será acolchoado com nulo, caso contrário, char Keyptr [KCCKeySizeaes256 1]; // espaço para o terminador (não utilizado) bZero (Keyptr, sizeof (keyptr)); // preencha com zeros (para preenchimento) nsuinteger datalength = [comprimento do texto simples]; size_t buffersize = datal comprimento kccblocksizeaes128; void *buffer = malloc (buffersize); bZero (buffer, sizeof (buffer)); size_t numbyteSencrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding, [[NSData AESKeyForPassword:PASSWORD] bytes], kCCKeySizeAES256, ivBuff /* initialization vector (optional) */, [plainText bytes], dataLength, / * input * / buffer, buffersize, / * saída * / & numbyteseSencrypted); if (CryptStatus == kccSuccess) {nsdata *EncryptData = [nsdata datawithbytesnocópia: tampão de tampão: numbytesencrypted]; retornar [EncryptData base64encoding]; } grátis (buffer); // livre o buffer; retornar nil;} Decripção do iOS
/ *Decrypt Método */ (NSString *) AES256DecryptWithCipherText: (NSString *) CipherTexts {nsdata *cipherdata = [nsdata datawithBase64EncodedString: cipherTexts]; // ´Key 'deve ser de 32 bytes para AES256, será acolchoado com nulo, caso contrário, char Keyptr [KCCKeySizeaes256 1]; // espaço para o terminador (não utilizado) bZero (Keyptr, sizeof (keyptr)); // preencha com zeros (para preenchimento) NSUINTEGER DATALLENGEM = [comprimento cipherdata]; size_t buffersize = datal comprimento kccblocksizeaes128; void *buffer = malloc (buffersize); size_t numbytesDecrypted = 0; CcCryptorStatus CryptStatus = ccCrypt (KCCDecrypt, Kccalgorithmaes128, Kccoptionpkcs7padding, [[nsdata aesKeyForpDord: senha], bytes], kckeysizeaes256, ivbuff:/ * bytes], kckeysizeaes256, IvBuff,/ * datalength, / * input * / buffer, buffersize, / * output * / & numbytesDecripted); if (CryptStatus == KCCSUCCESS) {NSDATA *EncryptData = [nsdata datawithbytesnocopy: tampão de tampão: numbytesDecripto]; retornar [[[NSString aloc] initwithData: codificação EncryptData: nsutf8StringEncoding] init]; } grátis (buffer); // livre o buffer; retornar nil;} Criptografia 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); retornar c.final (msg); } catch (nosuchalgorithMexception nsae) {log.e ("aesdemo", "nenhum suporte de cifra getInstance para" cmp); } catch (nosuchpaddingException nspe) {log.e ("aesdemo", "nenhum suporte de cifra getInstance para preenchimento" cmp); } catch (invalidkeyexception e) {log.e ("aesdemo", "exceção inválida da chave"); } catch (invalidalgorithmparameterexception e) {log.e ("aesdemo", "exceção do parâmetro de algoritmo inválido"); } catch (ilegalBlockSizeException e) {log.e ("aesdemo", "exceção ilegal de tamanho do bloco"); } catch (badpaddingException e) {log.e ("aesdemo", "exceção de preenchimento de mau"); } retornar nulo;} Decripção do Android
byte privado [] Decripto (String cmp, SecretKey SK, IVParameterspec IV, byte [] ciphertext) {try {cipher c = cipher.getInstance (cmp); c.init (cifra.decrypt_mode, sk, iv); retornar c.final (CipherText); } catch (nosuchalgorithMexception nsae) {log.e ("aesdemo", "nenhum suporte de cifra getInstance para" cmp); } catch (nosuchpaddingException nspe) {log.e ("aesdemo", "nenhum suporte de cifra getInstance para preenchimento" cmp); } catch (invalidkeyexception e) {log.e ("aesdemo", "exceção inválida da chave"); } catch (invalidalgorithmparameterexception e) {log.e ("aesdemo", "exceção do parâmetro de algoritmo inválido"); } catch (ilegalBlockSizeException e) {log.e ("aesdemo", "exceção ilegal de tamanho do bloco"); } catch (badpaddingException e) {log.e ("aesdemo", "exceção de preenchimento de mau"); E.PrintStackTrace (); } retornar nulo;}Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo seja útil para todos os desenvolvedores. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar.