序文
モバイル端子はますます人気が高まっています。開発プロセス中に、AndroidやiOSを扱うなど、モバイル端末に対処する必要があるシナリオに常に遭遇します。データの相互作用をより安全にするためには、データを暗号化して送信する必要があります。
この記事では、AESの暗号化と復号化、AndroidおよびiOSに共通するAES暗号化アルゴリズムを共有します。ServerインターフェイスがJavaで記述されている場合、.NETによって記述されたバックエンドインターフェイスの場合、サーバーインターフェイスが完璧である場合、自分のプロジェクトに直接統合できます。
iOS暗号化
/ *暗号化方法 */(nsString *)AES256ENCRYPTWITHPLANTEXT:(nsString *)Plain {nsdata *plaintext = [plane datausingencoding:nsutf8stringencoding]; //´key´はAES256の32バイトである必要があります。 //ターミネーター用の部屋(未使用)bzero(keyptr、sizeof(keyptr)); //ゼロ(パディング用)で塗りつぶすnsuinteger datalength = [plantext length]; size_t buffersize = datalength kccblocksizeaes128; void *buffer = malloc(buffersize); bzero(バッファー、sizeof(バッファー)); size_t numbytesencrypted = 0; cccryptorstatus cryptstatus = cccrypt(kcccencrypt、kccalgorithmaes128、kccoptionpkcs7padding、[[nsdata aeskeyforpassword:パスワード]バイト]、kcckeysizeaes256、Ivbuff /*初期入力[datal)* /* /* / */ buffer、buffersize、/ *output */&numbytesencrypted); if(cryptstatus == kccsuccess){nsdata *encryptdata = [nsdata datawithbytesnocopy:バッファー長:numbytesencrypted]; return [encryptData base64Encoding]; } free(buffer); //バッファを無料; nilを返します;} iOS復号化
/ *Method */(nsString *)AES256DECRYPTWITHCIPHERTEXT :( nsString *)ciphertexts {nsdata *cipherdata = [nsdata datawithbase64encodedString:ciphertexts]; //´key´はAES256の32バイトである必要があります。 //ターミネーター用の部屋(未使用)bzero(keyptr、sizeof(keyptr)); //ゼロ(パディング用)で塗りつぶすnsuinteger datalength = [cipherdata length]; size_t buffersize = datalength kccblocksizeaes128; void *buffer = malloc(buffersize); size_t numbytesdecrypted = 0; cccryptorstatus cryptstatus = cccrypt(kccdecrypt、kccalgorithmaes128、kccoptionpkcs7padding、[[nsdata aeskeyforpassword:bytes] bytes]、kcckeysizeaes256、ivbuff、/ * initialization vectard */ [cifees specte / *入力 * /バッファー、バッファイズ、 / *出力 * /&numbytesDecrypted); if(cryptstatus == kccsuccess){nsdata *encryptdata = [nsdata datawithbytesnocopy:バッファー長:numbytesdecrypted]; return [[[nsstring alloc] initwithdata:encryptdata encoding:nsutf8stringencoding] init]; } free(buffer); //バッファを無料; nilを返します;} Android暗号化
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のno cipher getinstanceサポート; } catch(nosuchpaddingexception nspe){log.e( "aesdemo"、 "padding for padding" cmpのサポートなし); } catch(invalidKeyException e){log.e( "aesdemo"、 "invalid key例外"); } catch(invalidalgorithmparameterexception e){log.e( "aesdemo"、 "無効なアルゴリズムパラメーター例外"); } catch(Illegalblocksizeexception e){log.e( "aesdemo"、 "違法なブロックサイズの例外"); } catch(badPaddingException e){log.e( "aesdemo"、 "bad padding Exception"); } nullを返します;} Android復号化
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のno cipher getinstanceサポート; } catch(nosuchpaddingexception nspe){log.e( "aesdemo"、 "padding for padding" cmpのサポートなし); } catch(invalidKeyException e){log.e( "aesdemo"、 "invalid key例外"); } catch(invalidalgorithmparameterexception e){log.e( "aesdemo"、 "無効なアルゴリズムパラメーター例外"); } catch(Illegalblocksizeexception e){log.e( "aesdemo"、 "違法なブロックサイズの例外"); } catch(badPaddingException e){log.e( "aesdemo"、 "bad padding Exception"); e.printstacktrace(); } nullを返します;}要約します
上記は、この記事のコンテンツ全体です。この記事の内容がすべての開発者に役立つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。