AES256 IOS7

XCode AppleKicsit megkésve de most aktualitást adva egy Magyar fejlesztés, és van egy kis időm, így nézzük meg mi is az a AES256 decrypt és encrypt !VOIP alkalmazás aminek a titkosításra AES256-ot használ !Régóta beakartam már mutatni, hogy készülnek a titkosítások és az első rész most akkor az aktualitás miatt az AES256 lesz, a következő az RSA és követi majd a többi!
Lesz egy NSData és egy NSString (kulcs érték) amivel megoldjuk az adott szöveg titkosítását és a kapott adatot visszafogjuk kódolni a kulcsérték segítségével!

Elsőként hozzunk létre egy alap alkalmazást egy sima lappal ami csak arra kell hogy NSLog-ként lássuk a kódolást és a visszakódolást ! Ha megvan a lap akkor adjunk hozzá egy NSData fájlt amit bármire elnevezhetünk pl:NSData+AES256.
Mint minden kódolási algoritmus így itt is kell a #import <CommonCrypto/CommonCryptor.h> amit a .h fájlhoz adjatok hozzá.

Ha ez megvan akkor a .h fájlba írjuk be a kódoló és a dekódolót amit majd meghívunk a UIViewController lapon.
– (NSData *)AES256Kodol:(NSString *)kulcs;
– (NSData *)AES256Dekodol:(NSString *)kulcs;

Most mehetünk a .m részbe és ott adjuk hozzá a két értéket ami elvégzi a kódolást és a visszakódolást amivel a kívánt szöveget fogjuk majd védeni !

– (NSData *)AES256Kodol:(NSString *)kulcs {
char keyPtr[kCCKeySizeAES256+1];
bzero(keyPtr, sizeof(keyPtr));
[kulcs getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr, kCCBlockSizeAES128,
NULL,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}

– (NSData *)AES256Dekodol:(NSString *)kulcs {
char keyPtr[kCCKeySizeAES256+1];
bzero(keyPtr, sizeof(keyPtr));
[kulcs getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr, kCCBlockSizeAES128,
NULL,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer);
return nil;
}

Ezzel meg is vagyunk és mehetünk a UIViewController-hez és importáljuk a most létrehozott .h fájlt !!
Múltkor mutattam, hogy az Xcode 5 már tartalmazza a BASE64-et így azt is használjuk fel, hogy még jobban titkosítsuk a szöveget ! Tehát lesz egy szövegünk ami először kap egy BASE 64-et és ezt fogjuk átrakni NSData formába és erre rakunk egy kulcsot ami titkosítja az eddigi műveletet !

– (void)viewDidLoad
{
[super viewDidLoad];

NSString *szoveg = @”pecsxcode.wordpress.com oldalon olvastam a AES256 titkosításról”;
NSData *szovegresz = [szoveg dataUsingEncoding:NSUTF8StringEncoding] ;
NSData *szovegreszz = [szovegresz base64EncodedDataWithOptions:0];
//a kulcs érték bármi lehet például (csak gondolom)a fent említettnél a telefonszám mivel tudjuk a hívott fél számát így azzal kódolunk és a hívott félnél meg az App a saját számát helyezi be!De lehet játszani a dátum megadásával is mivel ha a hívott fogadja a hívásunkat akkor azonos lesz a dátum :D, de mi maradjunk a telefonszámnál !
NSData *lekodolva = [szovegreszz AES256Kodol:@”+3630123456″];
NSLog(@”kodol %@”,lekodolva);
NSLog(@”—————————-“);

// ez a hívott fél visszakódolása és itt a példa szerint a saját telefonszáma van megadva kulcs értéknek
//mivel visszafelé kell gondolkodni ezért itt most az AES256 van először és utána jön a BASE64

NSData *visszakodolva = [lekodolva AES256Dekodol:@”+3630123456″];
NSLog(@”vissza kódolva kulcs értékkel %@”,visszakodolva);

NSData *base64 = [[NSData alloc]initWithBase64EncodedData:visszakodolva options:0];
NSString *eredmeny = [NSString stringWithUTF8String:[base64 bytes]];
NSLog(@”Eredmény: %@”,eredmeny);
NSLog(@”string kodol %@”,[NSString stringWithUTF8String:[base64 bytes]]);

}

Ennyi az egész, ha használjátok arra figyeljetek, hogy a kulcs (key) az mindig egyezzen mert különben nem tudja vissza kódolni a szöveget vagy épp ha van saját VOIP fejlesztésetek akkor a hangot 😀 ! Kulcs értékre ahogy fent is írtam bármi lehet de olyat válasszatok ami nem fix érték, hogy mindig más legyen a titkosító kulcs ( itt is lehet játszani, hogy a kulcsot is átrakjátok BASE64-be vagy a kulcsot is AES256-al kódoljátok ) !!

Klacsó Péter

Hozzászólás

Kategória: Források

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés /  Módosítás )

Google kép

Hozzászólhat a Google felhasználói fiók használatával. Kilépés /  Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés /  Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés /  Módosítás )

Kapcsolódás: %s