머리말
모바일 터미널이 점점 더 인기를 얻고 있습니다. 개발 과정에서 우리는 항상 Android 및 iOS를 다루는 모바일 터미널을 다루어야하는 시나리오를 만나게됩니다. 데이터 상호 작용을보다 안전하게하려면 데이터를 암호화하고 전송해야합니다.
이 기사는 AES의 암호화 및 암호 해독, Android 및 iOS에 공통적 인 AES 암호화 알고리즘을 공유 할 것입니다. Server 인터페이스가 Java로 작성되면, 전체 프레임 워크가 완벽합니다. .NET가 작성한 백엔드 인터페이스 인 경우 전체 프레임 워크가 완벽합니다.
iOS 암호화
/ *암호화 방법 */ (nsString *) AES256EncryPtWithPlainText : (nsString *) plain {nsdata *plaintext = [일반 DatausingEncoding : nsutf8stringencoding]; // ´key '는 aes256의 경우 32 바이트 여야합니다. 그렇지 않으면 char kyyptr [kcckeysizeaes256 1]; // 터미네이터 (미사용) bzero (kyyptr, sizeof (kyyptr))의 방; // 0으로 채우십시오 (패딩 용) NSUINTEGER DATALENGTH = [일반 텍스트 길이]; size_t buffersize = Datalength kccblocksizeaes128; void *buffer = malloc (buffersize); bzero (버퍼, sizeof (버퍼)); size_t numbytesencrypted = 0; cccryptorstatus cryptstatus = cccrypt (kccencrypt, kccalgorithmaes128, kccoptionpkcs7padding, [[nsdata aeskeyforpassword : password] bytes], kcckeysizeaes256, ivbuff /* datalization vector (옵션)* /, 일반)* /*. 입력 */ 버퍼, 버퍼 크기,/ *출력 */ & numbytesencrypted); if (cryptstatus == kccsuccess) {nsdata *encryptData = [nsdata datawithbytesnocopy : 버퍼 길이 : numbytesencrypted]; 반환 [EncryptData base644oding]; } free (버퍼); // 버퍼를 제거합니다. 반환 nil;} iOS 암호 해독
/ *DecRypt Method */ (NSString *) AES256DECRYPTWITHCIPHERTEXT : (NSSTRING *) CIPHERTEXTS {NSDATA *CIPHERDATA = [NSDATA DATAWITHBASE644ODODEDSTRING : CIPHERTEXTS]; // ´key '는 aes256의 경우 32 바이트 여야합니다. 그렇지 않으면 char kyyptr [kcckeysizeaes256 1]; // 터미네이터 (미사용) bzero (kyyptr, sizeof (kyyptr))의 방; // 0으로 채우십시오 (패딩 용) NSUINTEGER DATALENGTH = [CIPHERDATA 길이]; 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,/ * 초기화 vector (옵션) */ [cipherdata thetes] 데이터 길이, / * 입력 * / 버퍼, 버퍼 크기, / * 출력 * / & numbytesdecrypted); if (cryptstatus == kccsuccess) {nsdata *encryptdata = [nsdata datawithbytesnocopy : 버퍼 길이 : numbytesdecrypted]; return [[[nsstring alloc] initwithData : EncryptData Encoding : nsutf8stringencoding] init]; } free (버퍼); // 버퍼를 제거합니다. 반환 nil;} 안드로이드 암호화
private byte [] 암호화 (String CMP, SecretKey SK, IvParameterspec IV, Byte [] MSG) {Try {Cipher C = Cipher.getInstance (CMP); C.init (cipher.encrypt_mode, sk, iv); 반환 c.dofinal (msg); } catch (nosuchalgorithmexception nsae) {log.e ( "aesdemo", "cmp)에 대한 암호 GetInstance 지원 없음; } catch (nosuchpaddingException nspe) {log.e ( "aesdemo", "cmp 패딩에 대한 암호 GetInstance 지원 없음"; } catch (invalidkeyException e) {log.e ( "aesdemo", "유효하지 않은 키 예외"); } catch (invalidalgorithmparameterexception e) {log.e ( "aesdemo", "Invalid 알고리즘 매개 변수 예외"); } catch (불법 블록 시지 렉스 인식 e) {log.e ( "aesdemo", "불법 블록 크기 예외"); } catch (badpaddingException e) {log.e ( "aesdemo", "나쁜 패딩 예외"); } return null;} 안드로이드 암호 해독
private byte [] decrypt (String cmp, secretkey sk, ivparameterspec iv, byte [] ciphertext) {try {cipher c = cipher.getinstance (cmp); C.init (cipher.decrypt_mode, sk, iv); 반환 c.dofinal (ciphertext); } catch (nosuchalgorithmexception nsae) {log.e ( "aesdemo", "cmp)에 대한 암호 GetInstance 지원 없음; } catch (nosuchpaddingException nspe) {log.e ( "aesdemo", "cmp 패딩에 대한 암호 GetInstance 지원 없음"; } catch (invalidkeyException e) {log.e ( "aesdemo", "유효하지 않은 키 예외"); } catch (invalidalgorithmparameterexception e) {log.e ( "aesdemo", "Invalid 알고리즘 매개 변수 예외"); } catch (불법 블록 시지 렉스 인식 e) {log.e ( "aesdemo", "불법 블록 크기 예외"); } catch (badpaddingException e) {log.e ( "aesdemo", "나쁜 패딩 예외"); e.printstacktrace (); } return null;}요약
위는이 기사의 전체 내용입니다. 이 기사의 내용이 모든 개발자에게 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다.