Предисловие
Мобильные терминалы становятся все более популярными. В процессе разработки мы всегда сталкиваемся с сценариями, где нам приходится иметь дело с мобильными терминалами, такими как общение с Android и iOS. Чтобы сделать взаимодействие с данными более безопасным, нам нужно зашифровать данные и передавать их.
Эта статья поделится с вами с помощью шифрования и расшифровки AES, алгоритмов шифрования AES, общих для Android и iOS, вы можете напрямую интегрироваться в свои собственные проекты, если интерфейс сервера написан на Java, вся структура идеальна, если это интерфейс бэкэнд, написанный .NET, вы должны преобразовать его.
Шифрование iOS
/ *Метод шифрования */ (nsstring *) aes256encryptwithplaintext: (nsstring *) plain {nsdata *plaintext = [plain DataUsingEncoding: nsutf8StringEncoding]; // ´key 'должен составлять 32 байта для AES256, будет нулевой штифт, иначе char Keyptr [kcckeysizeaes256 1]; // Комната для терминатора (неиспользованный) BZERO (клавиатура, Sizeof (Keyptr)); // заполнить нулями (для прокладки) nsuinteger dataLength = [длина открытого текста]; size_t buffersize = dataLength kccblocksizeaes128; void *buffer = malloc (buffersize); BZER (Buffer, Sizeof (Buffer)); size_t numbytesencrypted = 0; CccryptorStatus cryptStatus = cccrypt (kcccencrypt, kccalgorithmaes128, kccoptionpkcs7padding, [[nsdata aeskeyforpassword: пароль] Bytes], kcckeysizeaes256, ivbuff / * yterniaz / * input * / buffer, buffersize, / * output * / & numbytesencrypted); if (cryptStatus == kccsuccess) {nsdata *encryptdata = [nsdata datawithbytesnocopy: длина буфера: numbytesencrypted]; вернуть [EncryptData Base64encoDing]; } бесплатно (буфер); // освободить буфер; вернуть ноль;} Decryption iOS
/ *Decrypt Method */ (nsstring *) aes256decryptwithciphertext: (nsstring *) ciphertexts {nsdata *cipherdata = [nsdata datawithbase64encodedString: ciphertexts]; // ´key 'должен составлять 32 байта для AES256, будет нулевой штифт, иначе char Keyptr [kcckeysizeaes256 1]; // Комната для терминатора (неиспользованный) BZERO (клавиатура, Sizeof (Keyptr)); // заполнить нулями (для прокладки) nsuinteger dataLength = [длину цифердаты]; size_t buffersize = dataLength kccblocksizeaes128; void *buffer = malloc (buffersize); size_t numbytesdecrypted = 0; CCCRYPTORSTATUS CROPTSTATUS = CCCRYPT (KCCDECRYPT, KCCALGORITHMAES128, KCCOPTIONPKCS7PADDING, [[NSDATA AESKEYFORPASSWORD: PASSORD] BYTE], KCCKEYSIZEAES256, IVBUFF,/ * инициализация. DataLength, / * input * / buffer, buffersize, / * output * / & numbytesdecrypted); if (cryptStatus == kccsuccess) {nsdata *encryptdata = [nsdata datawithbytesnocopy: длина буфера: numbytesdecrypted]; return [[[NSString alloc] initWithData: EncryptData Кодирование: nsutf8stringencoding] init]; } бесплатно (буфер); // освободить буфер; вернуть ноль;} Android шифрование
Частный байт [] Encrypt (String CMP, SecretKey SK, IVParameterSpec IV, Byte [] msg) {try {cipher c = cipher.getInstance (cmp); c.init (cipher.encrypt_mode, sk, iv); вернуть C.дофинал (MSG); } catch (nosuchalgorithmexception nsae) {log.e ("aesdemo", "Нет поддержки Cipher GetInstance для" cmp); } catch (nosuchpaddingexception nspe) {log.e ("aesdemo", "Нет поддержки Cipher GetInstance для прокладки" CMP); } catch (InvalidKeyException e) {log.e ("aesdemo", "Invalid Key Exception"); } catch (InvalidalgoritHmParameterException e) {log.e ("aesdemo", "исключение параметров алгоритма неверного алгоритма"); } catch (allectlocblocksizexception e) {log.e ("aesdemo", "исключение незаконного размера блока"); } catch (badPaddingException e) {log.e ("aesdemo", "Bad Padding Exception"); } return null;} Decryption Android
Частный байт [] Decrypt (String Cmp, SecretKey SK, ivparameterspec IV, byte [] ciphertext) {try {cipher c = cipher.getinstance (cmp); c.init (cipher.decrypt_mode, sk, iv); вернуть C.дофинал (зашифрованный текст); } catch (nosuchalgorithmexception nsae) {log.e ("aesdemo", "Нет поддержки Cipher GetInstance для" cmp); } catch (nosuchpaddingexception nspe) {log.e ("aesdemo", "Нет поддержки Cipher GetInstance для прокладки" CMP); } catch (InvalidKeyException e) {log.e ("aesdemo", "Invalid Key Exception"); } catch (InvalidalgoritHmParameterException e) {log.e ("aesdemo", "исключение параметров алгоритма неверного алгоритма"); } catch (allectlocblocksizexception e) {log.e ("aesdemo", "исключение незаконного размера блока"); } catch (badPaddingException e) {log.e ("aesdemo", "Bad Padding Exception"); e.printstacktrace (); } return null;}Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи будет полезно для всех разработчиков. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения.