• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#114 – Uso della crittografia nelle applicazioni iPhone e iPad con RNCryptor – Parte 2

By megabri | on 22 Marzo 2013 | 1 commento
Senza categoria

Ed eccoci con la seconda parte del nostro tutorial sull’uso della crittografia nelle applicazioni iOS (iPhone e iPad) con RNCryptor: oggi si fa pratica!
Per usare RNCryptor nel vostro progetto è sufficiente importare la libreria con tutti i files che contiene prelevandolo direttamente dallo stream di Rob Napier su github.
Sulla vostra applicazione sarà poi sufficiente importare questi headers per usufruire dei servizi offerti da RNCryptor:

#import "RNEncryptor.h"
#import "RNDecryptor.h"

Nell’esempio proposto ho optato per una interfaccia minimale. Questo per focalizzare l’attenzione esclusivamente sull’uso delle API di RNCryptor, piuttosto che ad elementi estetici o altre funzionalità del progetto. Per questo il tutorial si basa su un’unica UIViewController in cui sono presenti semplicemente tutti i campi di testo utili per dimostrare l’encryption e la decryption.


t114-crittografia-ios-app-con-RNCryptor-01

Possiamo osservare le UITextField predisposte per:

  1. inserire il testo da cifrare
  2. inserire la password con cui cifrare
  3. inserire la password con cui decifrare (per dimostrare che se non combacia con loriginale di cifratura, l’operazione non va a buon fine)
  4. inserire eventualmente lo stream dati (in ASCII) da decifrare

Sono presenti anche delle UITextView predisposte per:

  1. visualizzare il testo criptato (che verrà riportato anche sulla UITextField 4)
  2. visualizzare il testo in chiaro derivato dalla de-cifratura

Inoltre troviamo i pulsanti UIButton per:

  1. eseguire la cifratura
  2. eseguire la de-cifratura
  3. resettare tutti i campi

Qui di seguito si può osservare un esempio pratico di inserimento di una frase e della password. Quindi dopo aver premuto sul pulsante “Encrypt” verrà visualizzato il messaggio cifrato.


t114-crittografia-ios-app-con-RNCryptor-02


t114-crittografia-ios-app-con-RNCryptor-03

La funzione di encrypt è realizzata con queste poche righe di codice:

NSData *data = [textToCrypt.text dataUsingEncoding:NSUTF8StringEncoding];
//encrypt!
NSData *encryptedData = [RNEncryptor encryptData:data
                                    withSettings:kRNCryptorAES128Settings
                                        password:password2crypt.text
                                           error:&error];

Come si può osservare è estremamente semplice, basta indicare un oggetto NSData che nel tutorial è stato derivato dalla conversione in NSData della NSString del campo UITextField. Occorre indicare la struttura dati che imposta tutti i settaggi dell’algoritmo, che nell’esempio è riportata kRNCryptorAES128Settings. Quindi indicare la password in formato NSString e la variabile NSError che conterrà l’eventuale errore della conversione.

L’output della cifratura è un oggetto NSData, per poterlo visualizzare a video è stata realizzata una funzione di conversione da NSData ad NSString che rappresenta quindi i dati binari in un formato hex.

cryptedString = [FirstViewController hexStringFromData:(NSData *)encryptedData];

Qui sotto si può osservare anche l’output dell’NSLog che è sparso nel codice:

2013-02-19 21:36:26.655 MGCryptorTutorial[9178:c07] sourceText:Questo è un testo di prova in chiaro!
2013-02-19 21:36:26.657 MGCryptorTutorial[9178:c07] sourceData:<51756573 746f20c3 a820756e 20746573 746f2064 69207072 6f766120 696e2063 68696172 6f21>
2013-02-19 21:36:26.657 MGCryptorTutorial[9178:c07] sourcePassword:<31323334 61626364>
2013-02-19 21:36:26.671 MGCryptorTutorial[9178:c07] encryptionSalt:<6a880558 ceb05090>
2013-02-19 21:36:26.671 MGCryptorTutorial[9178:c07] encryptionKey:<27e2d9d5 fd9c7e1d 7ed5ae1d be3d2670>
2013-02-19 21:36:26.672 MGCryptorTutorial[9178:c07] HMACSalt:<1e6b0473 43e1cc48>
2013-02-19 21:36:26.672 MGCryptorTutorial[9178:c07] HMACKey:<558aa20e 1c54fa1c 24963db7 6c1c4386>
2013-02-19 21:36:26.673 MGCryptorTutorial[9178:c07] IV:<5b1e1561 9a9ffb2c 08a13aa4 8f3be152>
2013-02-19 21:36:26.673 MGCryptorTutorial[9178:c07] encryptedData:<02016a88 0558ceb0 50901e6b 047343e1 cc485b1e 15619a9f fb2c08a1 3aa48f3b e152d4dd 6af1a48e 8da3b113 a6d13610 4817f424 7dbed44d b52d5cbc 6b60ee2d 72136ed6 86e372c9 37627571 19c780e9 cf5da918 b4c8bd52 323b31ff 0752d1da 61439c53 81c5>
2013-02-19 21:36:26.674 MGCryptorTutorial[9178:c07] encryptedText:02016A880558CEB050901E6B047343E1CC485B1E15619A9FFB2C08A13AA48F3BE152D4DD6AF1A48E8DA3B113A6D136104817F4247DBED44DB52D5CBC6B60EE2D72136ED686E372C93762757119C780E9CF5DA918B4C8BD52323B31FF0752D1DA61439C5381C5

Dopo aver impostato come password di de-cifratura la stessa per la cifratura (nel nostro esempio vale “1234abcd”, cliccando sul pulsante “Decrypt” si può osservare come l’operazione di de-cifratura riporti l’esito OK in verde e il messaggio che è tornato in chiaro nella UITextView relativa.


t114-crittografia-ios-app-con-RNCryptor-04

L’operazione di decrypt è eseguita mediante questa riga di codice:

NSData *decryptedData = [RNDecryptor decryptData:data
                                    withPassword:password2decrypt.text
                                           error:&error];

Come per l’encrypt, anche in questo caso è molto semplice, basta indicare l’oggetto NSData d’ingresso, la password e la variabile d’errore d’uscita.

Si noti come (a differenza della parte Encryption) non è necessario esplicitare la configurazione dell’algoritmo. L’ho fatto notare a Rob, il quale mi ha risposto che al momento la configurazione del decrypt è pre-cablata e non ha in programma di renderla configurabile così come è accaduto per la parte di encrypt. Sinceramente non ho capito benissimo le motivazioni di questa scelta, ma ad ogni modo se si vogliono cambiare a proprio piacimento è sufficiente cercare la stringa kRNCryptorAES128Settings in tutto il progetto e cambiarla con una tabella di configurazione diversa in base alle proprie eventuali proprie esigenze.

Ho voluto predisporre anche il campo UITextField per indicare (magari con un copy-and-paste) una stringa esadecimale che potrebbe essere il risultato della cifratura effettuata con lo stesso meccanismo di RNCryptor, ma implementata in un linguaggio diverso (ad esempio in PHP) e quindi verificarne l’esattezza con l’operazione di decrypt. Qui sotto è riportato un altro esempio di questo genere:


t114-crittografia-ios-app-con-RNCryptor-05

Proviamo a questo punto ad introdurre un errore volontariamente nella stringa di partenza, per esempio cambiando l’ultimo byte dello stream con il valore FF. Qui di seguito si può vedere l’errore generato, che deriva dal controllo della signature con l’HMAC.


t114-crittografia-ios-app-con-RNCryptor-06


t114-crittografia-ios-app-con-RNCryptor-07

Conclusioni

Questa è la fantastica e completa documentazione di RNCryptor realizzata da Rob Napier, in perfetto stile Apple.

Questo è il repository github di RnCryptor.

Qui, invece, potete scaricare il progetto completo Objective-C in Xcode 4.6.

Un ringraziamento alla redazione di devAPP per avermi dato la possibilità di pubblicare questo tutorial su questo blog. Non dimenticatevi di accedere anche al mio blog personale http://www.megabri.com e al portale delle mie App http://www.mgproductions.it.

Gabriele Merlonghi

Vuoi ringraziare l’autore di questa guida?
Offrigli un caffè scaricando la sua applicazione 🙂

Banner-Fast-And-Tutor

Share this story:
  • tweet

Tags: CommonCryptocrittografia applicazione iPhone iPadprogrammare iphoneRNCryptor iOSTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • AFNetworking: una libreria per semplificare il networking di un app

    18 Febbraio 2015 - 0 Comment
  • T#113 – Uso della crittografia nelle applicazioni iPhone e iPad con RNCryptor – Parte 1

    18 Marzo 2013 - 2 Comments
  • RSSheet: una classe alpha per scrivere fogli di calcolo con le nostre applicazioni iPhone e iPad

    21 Settembre 2011 - 14 Comments

Author Description

One Response to “T#114 – Uso della crittografia nelle applicazioni iPhone e iPad con RNCryptor – Parte 2”

  1. 23 Marzo 2013

    TechnoHouse » Tutorial sull’uso della Crittografia in applicazioni iOS parte 2

    […] T#114 – Uso della crittografia nelle applicazioni iPhone e iPad con RNCryptor – Parte 2 […]

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO