Kata pengantar
Terminal seluler menjadi semakin populer. Selama proses pengembangan, kami selalu menemukan skenario di mana kami harus berurusan dengan terminal seluler, seperti berurusan dengan Android dan iOS. Untuk membuat interaksi data lebih aman, kita perlu mengenkripsi data dan mengirimkannya.
Artikel ini akan berbagi dengan Anda enkripsi dan dekripsi AES, algoritma enkripsi AES yang umum untuk Android dan iOS, Anda dapat secara langsung mengintegrasikan ke dalam proyek Anda sendiri, jika antarmuka server ditulis dalam Java, seluruh kerangka kerja sempurna, jika itu adalah antarmuka backend yang ditulis oleh .NET, Anda harus mengubahnya.
Enkripsi iOS
/ *Metode Enkripsi */ (NSString *) AES256EncryptWithPlaintext: (NSString *) Plain {NSData *Plaintext = [Plain DataUsingEncoding: NSUTF8StringEncoding]; // 'Key' harus 32 byte untuk AES256, akan dinyalakan nol jika tidak char keyptr [kcckeysizeaes256 1]; // Room for Terminator (tidak digunakan) bzero (keyptr, sizeof (keyptr)); // Isi dengan nol (untuk padding) nsuinteger datalength = [PLAINDext length]; size_t bufferSize = datalength 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,/ *output */ & numbytesEncrypted); if (cryptstatus == kccsuccess) {nsdata *encryptData = [nsdata datawithbytesnocopy: panjang buffer: numbytesEncrypted]; return [encryptData base64Encoding]; } gratis (buffer); // Bebaskan buffer; kembalikan nil;} Dekripsi iOS
/ *Metode Dekripsi */ (NSString *) AES256DecryptWithCiphertext: (nsstring *) ciphertexts {nsdata *cipherdata = [nsdata DataWithBase64encodedString: cipherTexts]; // 'Key' harus 32 byte untuk AES256, akan dinyalakan nol jika tidak char keyptr [kcckeysizeaes256 1]; // Room for Terminator (tidak digunakan) bzero (keyptr, sizeof (keyptr)); // Isi dengan nol (untuk padding) nsuinteger datalength = [panjang cipherdata]; size_t bufferSize = datalength kccblocksizeaes128; void *buffer = malloc (bufferSize); size_t numbytesdecrypted = 0; CCCRYPTORSTATUS CRYPTSTATUS = CCCRYPT (KCCDECRYPT, KCCALGORITHMAES128, KCCOPTIONPKCS7PADDING, [[NSDATA AESKEYFORPASSWORD, Kata Sandi], KCCKEYSIZAESAES256, IVBUFF,/ * PANJANG PENTING], KCCKEYZEAES256, IVBUFF,/ * DATREZASI, KCCKEYZAESAES256, IVBUFF,/ * / * input * / buffer, buffersize, / * output * / & numbytesDecrypted); if (cryptstatus == kccsuccess) {nsdata *encryptData = [nsdata datawithbytesnocopy: panjang buffer: numbytesdecrypted]; return [[[[nsstring alloc] initwithData: encryptData encoding: nsutf8stringencoding] init]; } gratis (buffer); // Bebaskan buffer; kembalikan nil;} Enkripsi Android
private byte [] enkripsi (String CMP, Secretkey SK, ivparameterspec iv, byte [] msg) {coba {cipher c = cipher.getInstance (cmp); c.init (cipher.encrypt_mode, SK, iv); mengembalikan c.dofinal (msg); } catch (nosuchalgorithmException nsae) {log.e ("aesdemo", "Tidak ada cipher getinstance dukungan untuk" cmp); } catch (nosuchpaddingException nspe) {log.e ("aesdemo", "no cipher getinstance dukungan untuk padding" cmp); } catch (InvalidKeyException e) {log.e ("aesdemo", "pengecualian kunci tidak valid"); } catch (invalidalgorithmParameterException e) {log.e ("aesdemo", "pengecualian parameter algoritma tidak valid"); } catch (ilegalblocksizeException e) {log.e ("aesdemo", "pengecualian ukuran blok ilegal"); } catch (badpaddingException e) {log.e ("aesdemo", "bad Padding Exception"); } return null;} Dekripsi Android
private byte [] decrypt (String CMP, Secretkey SK, ivparameterspec iv, byte [] ciphertext) {coba {cipher c = cipher.getInstance (cmp); c.init (cipher.decrypt_mode, SK, iv); mengembalikan c.dofinal (ciphertext); } catch (nosuchalgorithmException nsae) {log.e ("aesdemo", "Tidak ada cipher getinstance dukungan untuk" cmp); } catch (nosuchpaddingException nspe) {log.e ("aesdemo", "no cipher getinstance dukungan untuk padding" cmp); } catch (InvalidKeyException e) {log.e ("aesdemo", "pengecualian kunci tidak valid"); } catch (invalidalgorithmParameterException e) {log.e ("aesdemo", "pengecualian parameter algoritma tidak valid"); } catch (ilegalblocksizeException e) {log.e ("aesdemo", "pengecualian ukuran blok ilegal"); } catch (badpaddingException e) {log.e ("aesdemo", "bad Padding Exception"); e.printstacktrace (); } return null;}Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini akan membantu semua pengembang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi.