Heim > Java > javaLernprogramm > Beispielcode für die AES128-Verschlüsselung und -Entschlüsselung, der für Android, iOS und Java üblich ist

Beispielcode für die AES128-Verschlüsselung und -Entschlüsselung, der für Android, iOS und Java üblich ist

高洛峰
Freigeben: 2017-01-24 11:38:33
Original
2006 Leute haben es durchsucht

Vorwort

Mobile Endgeräte erfreuen sich immer größerer Beliebtheit. Während des Entwicklungsprozesses werden wir immer wieder auf Szenarien stoßen, in denen wir uns mit mobilen Endgeräten auseinandersetzen müssen, beispielsweise mit Android und iOS. Um die Dateninteraktion sicherer zu machen, müssen wir die Daten für die Übertragung verschlüsseln.

In diesem Artikel erfahren Sie mehr über die Verschlüsselung und Entschlüsselung von AES, dem gemeinsamen AES-Verschlüsselungsalgorithmus für Android und iOS. Sie können ihn direkt in Ihr eigenes Projekt integrieren, das gesamte Framework wird perfekt sein. . Wenn es sich um eine in .NET geschriebene Backend-Schnittstelle handelt, muss sie

IOS-Verschlüsselung

/*加密方法*/
 (NSString *)AES256EncryptWithPlainText:(NSString *)plain {
 NSData *plainText = [plain dataUsingEncoding:NSUTF8StringEncoding];
 // ´key´ should be 32 bytes for AES256, will be null-padded otherwise
 char keyPtr[kCCKeySizeAES256 1]; // room for terminator (unused)
 bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
   
 NSUInteger dataLength = [plainText length];
 
 size_t bufferSize = dataLength kCCBlockSizeAES128;
 void *buffer = malloc(bufferSize);
 bzero(buffer, sizeof(buffer));
  
 size_t numBytesEncrypted = 0;
  
 CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding,
           [[NSData AESKeyForPassword:PASSWORD] bytes], kCCKeySizeAES256,
           ivBuff /* initialization vector (optional) */,
           [plainText bytes], dataLength, /* input */
           buffer, bufferSize, /* output */
           &numBytesEncrypted);
 if (cryptStatus == kCCSuccess) {
  NSData *encryptData = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
  return [encryptData base64Encoding];
 }
  
 free(buffer); //free the buffer;
 return nil;
}
Nach dem Login kopieren

<🎜 geändert werden >IOS-Entschlüsselung

/*解密方法*/
 (NSString *)AES256DecryptWithCiphertext:(NSString *)ciphertexts{
  
 NSData *cipherData = [NSData dataWithBase64EncodedString:ciphertexts];
 // ´key´ should be 32 bytes for AES256, will be null-padded otherwise
 char keyPtr[kCCKeySizeAES256 1]; // room for terminator (unused)
 bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
   
 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:PASSWORD] bytes], kCCKeySizeAES256,
           ivBuff ,/* initialization vector (optional) */
           [cipherData bytes], dataLength, /* input */
           buffer, bufferSize, /* output */
           &numBytesDecrypted);
  
 if (cryptStatus == kCCSuccess) {
  NSData *encryptData = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
  return [[[NSString alloc] initWithData:encryptData encoding:NSUTF8StringEncoding] init];
 }
  
 free(buffer); //free the buffer;
 return nil;
}
Nach dem Login kopieren
 

Android-Verschlüsselung

private byte[] encrypt(String cmp, SecretKey sk, IvParameterSpec IV,
  byte[] msg) {
 try {
  Cipher c = Cipher.getInstance(cmp);
  c.init(Cipher.ENCRYPT_MODE, sk, IV);
  return c.doFinal(msg);
 } catch (NoSuchAlgorithmException nsae) {
  Log.e("AESdemo", "no cipher getinstance support for " cmp);
 } catch (NoSuchPaddingException nspe) {
  Log.e("AESdemo", "no cipher getinstance support for padding " cmp);
 } catch (InvalidKeyException e) {
  Log.e("AESdemo", "invalid key exception");
 } catch (InvalidAlgorithmParameterException e) {
  Log.e("AESdemo", "invalid algorithm parameter exception");
 } catch (IllegalBlockSizeException e) {
  Log.e("AESdemo", "illegal block size exception");
 } catch (BadPaddingException e) {
  Log.e("AESdemo", "bad padding exception");
 }
 return null;
}
Nach dem Login kopieren
 

Android-Entschlüsselung

private byte[] decrypt(String cmp, SecretKey sk, IvParameterSpec IV,
   byte[] ciphertext) {
 try {
  Cipher c = Cipher.getInstance(cmp);
  c.init(Cipher.DECRYPT_MODE, sk, IV);
  return c.doFinal(ciphertext);
 } catch (NoSuchAlgorithmException nsae) {
  Log.e("AESdemo", "no cipher getinstance support for " cmp);
 } catch (NoSuchPaddingException nspe) {
  Log.e("AESdemo", "no cipher getinstance support for padding " cmp);
 } catch (InvalidKeyException e) {
  Log.e("AESdemo", "invalid key exception");
 } catch (InvalidAlgorithmParameterException e) {
  Log.e("AESdemo", "invalid algorithm parameter exception");
 } catch (IllegalBlockSizeException e) {
  Log.e("AESdemo", "illegal block size exception");
 } catch (BadPaddingException e) {
  Log.e("AESdemo", "bad padding exception");
  e.printStackTrace();
 }
 return null;
}
Nach dem Login kopieren

Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für alle Entwickler hilfreich sein kann . Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.

Weitere Artikel zum AES128-Verschlüsselungs- und Entschlüsselungsbeispielcode für Android, iOS und Java finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage