مقدمة
المحطات المحمولة أصبحت أكثر وأكثر شعبية. أثناء عملية التطوير ، نواجه دائمًا سيناريوهات حيث يتعين علينا التعامل مع المحطات المحمولة ، مثل التعامل مع Android و iOS. من أجل جعل تفاعل البيانات أكثر أمانًا ، نحتاج إلى تشفير البيانات ونقلها.
ستشاركك هذه المقالة مع تشفير وفك تشفير AES ، وخوارزميات تشفير AES الشائعة في Android و iOS ، يمكنك الاندماج مباشرة في مشاريعك الخاصة ، إذا كانت واجهة الخادم مكتوبة في Java ، فإن الإطار بأكمله مثالي ، إذا كان واجهة خلفية مكتوبة بواسطة .net ، يجب أن تحولها.
تشفير iOS
/ *طريقة التشفير */ (NSString *) AES256ENCRYPTWITHPLAINTEXT: (NSSTRING *) عادي {nsdata *plaintext = [dataUsingencoding: nsutf8stringencoding] ؛ // ´Key´ يجب أن يكون 32 بايت لـ AES256 ، وسيتم تشغيله الفارغ وإلا فإن char keyptr [kcckeysizeaes256 1] ؛ // غرفة للمطالبة (غير مستخدمة) Bzero (KeyPtr ، sizeof (keyptr)) ؛ // املأ بالأصفار (للحشو) nsuinteger datalength = [طول النص العادي] ؛ size_t buffersize = datalength KCCBBlockSizeaes128 ؛ void *buffer = malloc (bufferSize) ؛ Bzero (Buffer ، sizeof (Buffer)) ؛ size_t numbytesencrypted = 0 ؛ cccryptorstatus cryptstatus = cccrypt (kcccencrypt ، kccalgorithmaes128 ، kccoptionpkcs7padding ، [[nsdata aeskeyforpassword: password] bytes] / * input * / buffer ، buffersize ، / * output * / & numbytesencrypted) ؛ if (cryptStatus == KCCSUCCESS) {nsdata *encryptdata = [nsdata datawithbytesnocopy: طول المخزن المؤقت: numbytesencrypted] ؛ إرجاع [incryptdata base64encoding] ؛ } مجاني (عازلة) ؛ // حرر المخزن المؤقت ؛ العودة لا شيء ؛} IOS فك تشفير
/ *decrypt method */ (NSString *) AES256DECryptWithCipherText: (NSString *) ciphertexts {nsdata *cipherdata = [nsdata datawithbase64encodedString: ciphertexts] ؛ // ´Key´ يجب أن يكون 32 بايت لـ AES256 ، وسيتم تشغيله الفارغ وإلا فإن char keyptr [kcckeysizeaes256 1] ؛ // غرفة للمطالبة (غير مستخدمة) Bzero (KeyPtr ، sizeof (keyptr)) ؛ // املأ بالأصفار (للحشوة) nsuinteger datalength = [طول cipherdata] ؛ size_t buffersize = datalength KCCBBlockSizeaes128 ؛ void *buffer = malloc (bufferSize) ؛ size_t numbytesDecrypted = 0 ؛ cccryptorstatus cryptstatus = cccrypt (kccdecrypt ، kccalgorithmaes128 ، kccoptionpkcs7padding ، [[nsdata aeskeyforpassword: password] ، bytes] ، kcckeyysaies256 ، ivbuff ، Datalength ، / * input * / buffer ، bufferSize ، / * output * / & numbytesDecrypted) ؛ if (cryptStatus == KCCSUCCESS) {nsdata *encryptdata = [nsdata datawithbytesnocopy: طول المخزن المؤقت: numbytesDecrypted] ؛ إرجاع [[[nsstring incloc] initWithData: تشفير incryptdata: nsutf8stringencoding] init] ؛ } مجاني (عازلة) ؛ // حرر المخزن المؤقت ؛ العودة لا شيء ؛} تشفير Android
Byte Byte [] Encrypt (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" ، "لا يوجد دعم cipher getInstance لـ" cmp) ؛ } catch (nosuchpadddingexception nspe) {log.e ("aesdemo" ، "no cipher getInstance support for padding" cmp) ؛ } catch (invalidKeyException e) {log.e ("aesdemo" ، "invalid key revision") ؛ } catch (invalidalgorithmparameTerexception e) {log.e ("aesdemo" ، "استثناء معلمة الخوارزمية غير صالحة") ؛ } catch (includalBlockSeizeException e) {log.e ("aesdemo" ، "استثناء حجم الكتلة غير الشرعي") ؛ } catch (badpaddingexception e) {log.e ("aesdemo" ، "Bad Padding Exception") ؛ } إرجاع فارغ ؛} Android Decryption
byte 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 (النص المشفر) ؛ } catch (nosuchalgorithmexception nsae) {log.e ("aesdemo" ، "لا يوجد دعم cipher getInstance لـ" cmp) ؛ } catch (nosuchpadddingexception nspe) {log.e ("aesdemo" ، "no cipher getInstance support for padding" cmp) ؛ } catch (invalidKeyException e) {log.e ("aesdemo" ، "invalid key revision") ؛ } catch (invalidalgorithmparameTerexception e) {log.e ("aesdemo" ، "استثناء معلمة الخوارزمية غير صالحة") ؛ } catch (includalBlockSeizeException e) {log.e ("aesdemo" ، "استثناء حجم الكتلة غير الشرعي") ؛ } catch (badpaddingexception e) {log.e ("aesdemo" ، "Bad Padding Exception") ؛ E.PrintStackTrace () ؛ } إرجاع فارغ ؛}لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون محتوى هذه المقالة مفيدًا لجميع المطورين. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل.