คำนำ
เทอร์มินัลมือถือกำลังได้รับความนิยมมากขึ้นเรื่อย ๆ ในระหว่างกระบวนการพัฒนาเรามักจะพบกับสถานการณ์ที่เราต้องจัดการกับเทอร์มินัลมือถือเช่นการจัดการกับ Android และ iOS เพื่อให้การโต้ตอบข้อมูลปลอดภัยยิ่งขึ้นเราจำเป็นต้องเข้ารหัสข้อมูลและส่งข้อมูล
บทความนี้จะแบ่งปันการเข้ารหัสและการถอดรหัสของ AES ซึ่งเป็นอัลกอริทึมการเข้ารหัส AES ร่วมกับ Android และ iOS คุณสามารถรวมเข้ากับโครงการของคุณเองโดยตรงหากอินเทอร์เฟซเซิร์ฟเวอร์ถูกเขียนใน Java เฟรมเวิร์กทั้งหมดนั้นสมบูรณ์แบบ
การเข้ารหัส iOS
/ *วิธีการเข้ารหัส */ (nsstring *) AES256EncryptWithPlainText: (NSSTRING *) ธรรมดา {NSDATA *plainText = [datausingEncoding ธรรมดา: NSUTF8STRINGENCODING]; //´key´ ควรเป็น 32 ไบต์สำหรับ AES256 จะได้รับการติดตั้งเป็นโมฆะมิฉะนั้นถ่าน keyptr [kcckeysizeaes256 1]; // ห้องพักสำหรับ terminator (ไม่ได้ใช้) bzero (keyptr, sizeof (keyptr)); // เติมด้วย Zeroes (สำหรับช่องว่างภายใน) nsuinteger datalength = [ความยาวข้อความธรรมดา]; size_t buffersize = datalength kccblocksizeaes128; เป็นโมฆะ *บัฟเฟอร์ = malloc (บัฟเฟอร์); bzero (บัฟเฟอร์, sizeof (บัฟเฟอร์)); size_t numbytesencrypted = 0; cccryptorstatus cryptstatus = cccrypt (kccenctpt, kccalgorithmaes128, kccoptionpkcs7padding, [[nsdata aeskeyforpassword: bytes], Kcckeysizeaees256, IVBAFF / * บัฟเฟอร์, / * เอาต์พุต * / & numbytesencrypted); if (cryptstatus == kccsuccess) {nsdata *encryptData = [nsdata datawithBytesNocopy: ความยาวบัฟเฟอร์: numbytesencrypted]; return [ENCRYPTDATA BASE64ENCODING]; } ฟรี (บัฟเฟอร์); // ฟรีบัฟเฟอร์; กลับ nil;} การถอดรหัส iOS
/ *วิธีการถอดรหัส */ (nsstring *) aes256decryptwithciphertext: (nsstring *) ciphertexts {nsdata *cipherdata = [nsdata datawithBase64EncodedString: ciphertexts]; //´key´ ควรเป็น 32 ไบต์สำหรับ AES256 จะได้รับการติดตั้งเป็นโมฆะมิฉะนั้นถ่าน keyptr [kcckeysizeaes256 1]; // ห้องพักสำหรับ terminator (ไม่ได้ใช้) bzero (keyptr, sizeof (keyptr)); // เติมด้วย Zeroes (สำหรับช่องว่างภายใน) nsuinteger datalength = [cipherdata length]; size_t buffersize = datalength kccblocksizeaes128; เป็นโมฆะ *บัฟเฟอร์ = malloc (บัฟเฟอร์); size_t numbytesdecrypted = 0; cccryptorstatus cryptstatus = cccrypt (kccdecrypt, kccalgorithmaes128, kccoptionpkcs7padding, [[nsdata aeskeyforpassword: รหัสผ่าน] bytes], kcckeysizeaees256, IVBBUFF,/* */ buffer, buffersize,/ *output */ & numbytesdecrypted); if (cryptstatus == kccsuccess) {nsdata *encryptData = [nsdata datawithBytesNocopy: ความยาวบัฟเฟอร์: numbytesdecrypted]; return [[[NSString alloc] initwithData: EncryptData การเข้ารหัส: NSUTF8StringEncoding] init]; } ฟรี (บัฟเฟอร์); // ฟรีบัฟเฟอร์; กลับ nil;} การเข้ารหัส Android
ไบต์ส่วนตัว [] เข้ารหัส (สตริง CMP, SecretKey SK, ivParameterspec IV, byte [] msg) {ลอง {cipher c = cipher.getInstance (CMP); c.init (cipher.encrypt_mode, sk, iv); กลับ C.Dofinal (ผงชูรส); } catch (nosuchalgorithmexception nsae) {log.e ("Aesdemo", "ไม่มีการสนับสนุนการเชื่อมโยง getinstance สำหรับ" CMP); } catch (nosuchpaddingexception nspe) {log.e ("aesdemo", "ไม่มีการสนับสนุนการเชื่อมโยง getInstance สำหรับ padding" cmp); } catch (InvalidKeyException E) {log.e ("Aesdemo", "ข้อยกเว้นคีย์ที่ไม่ถูกต้อง"); } catch (invalidalgorithmparameterexception e) {log.e ("aesdemo", "อัลกอริทึมอัลกอริทึมที่ไม่ถูกต้องยกเว้น"); } catch (unlegalblocksizeException e) {log.e ("Aesdemo", "ข้อยกเว้นขนาดบล็อกที่ผิดกฎหมาย"); } catch (badpaddingexception e) {log.e ("aesdemo", "ข้อยกเว้นการพายที่ไม่ดี"); } return null;} การถอดรหัส Android
ไบต์ส่วนตัว [] DECRYPT (String CMP, SecretKey SK, IVParameterspec IV, BYTE [] Ciphertext) {ลอง {cipher c = cipher.getInstance (CMP); c.init (cipher.decrypt_mode, sk, iv); ส่งคืน c.dofinal (ciphertext); } catch (nosuchalgorithmexception nsae) {log.e ("Aesdemo", "ไม่มีการสนับสนุนการเชื่อมโยง getinstance สำหรับ" CMP); } catch (nosuchpaddingexception nspe) {log.e ("aesdemo", "ไม่มีการสนับสนุนการเชื่อมโยง getInstance สำหรับ padding" cmp); } catch (InvalidKeyException E) {log.e ("Aesdemo", "ข้อยกเว้นคีย์ที่ไม่ถูกต้อง"); } catch (invalidalgorithmparameterexception e) {log.e ("aesdemo", "อัลกอริทึมอัลกอริทึมที่ไม่ถูกต้องยกเว้น"); } catch (unlegalblocksizeException e) {log.e ("Aesdemo", "ข้อยกเว้นขนาดบล็อกที่ผิดกฎหมาย"); } catch (badpaddingexception e) {log.e ("aesdemo", "ข้อยกเว้นการพายที่ไม่ดี"); E.PrintStackTrace (); } return null;}สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะเป็นประโยชน์กับนักพัฒนาทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร