Hallo!
Ich habe heute ein sehr interessantes Problem.
Momentan befasse ich mich mit der AES Verschlüsselnung.
Wie ich mit einem PHP-Skript verschlüsseln und entschlüsseln kann ist mir klar.
In ObjC in meinem iPhone App kann ich das auch.
Allerdings möchte ich nun via HTTP-Request von dem iPhone App aus eine Anfrage an das PHP-Skript senden.
Das PHP-Skript soll mir die Anwort mittels AES-Verschlüsselung verschlüsseln und an meine App die Antwort senden.
Die App soll erhaltenen String dann entschlüsseln und erstmal in der Konsole ausgeben.
Ansich ist das Ganze ja schon sehr spannend.
Allerdings habe ich noch Probleme den verschlüsselten Antwort-String zu entschlüsseln.
Nachfolgend mal mein Code:
Alles anzeigen
Der String wird php-seitig mit dem gleichen Passwort verschlüsselt.
Habe ich einen String in ObjC verschlüsselt, so lässt er sich auch wieder korrekt entschlüsseln.
Nur mit dem verschlüsselten "php-String" funktioniert das nicht.
Nachfolgend das php-Skript:
Alles anzeigen
Nachfolgend noch der ObjC code zum entschlüsseln:
Alles anzeigen
Ich komme hier einfach nicht weiter.
Hat von euch jmd Erfahrung mit der AES-Verschlüsselung?
Das Zusammenspiel zwischen dem PHP-Skript und der iPhone App in ObjC funktioniert bei mir nicht.
Ich bin über jede Hilfe und Anregung sehr Dankbar!
Gerne werde ich von der erarbeiteten Lösung eine kurze Zusammenfassung hinterlassen.
Vielen Dank euch allen!
Schönen Gruss!
Ich habe heute ein sehr interessantes Problem.
Momentan befasse ich mich mit der AES Verschlüsselnung.
Wie ich mit einem PHP-Skript verschlüsseln und entschlüsseln kann ist mir klar.
In ObjC in meinem iPhone App kann ich das auch.
Allerdings möchte ich nun via HTTP-Request von dem iPhone App aus eine Anfrage an das PHP-Skript senden.
Das PHP-Skript soll mir die Anwort mittels AES-Verschlüsselung verschlüsseln und an meine App die Antwort senden.
Die App soll erhaltenen String dann entschlüsseln und erstmal in der Konsole ausgeben.
Ansich ist das Ganze ja schon sehr spannend.
Allerdings habe ich noch Probleme den verschlüsselten Antwort-String zu entschlüsseln.
Nachfolgend mal mein Code:
PHP-Quellcode
- /* HTTP Request aus der iPhone App */
- NSURL *phpSkript = [NSURL URLWithString:@"http://pfad/index.php"];
- NSURLRequest *anfrage = [NSURLRequest requestWithURL:phpSkript];
- NSURLResponse *antwort = nil;
- NSError *fehler = nil;
- NSData *empfangeneDaten = [NSURLConnection sendSynchronousRequest:anfrage
- returningResponse:&antwort
- error:&fehler];
- NSString *ans = [[NSString alloc] initWithData:empfangeneDaten encoding:NSUTF8StringEncoding];
- // ans: kUDKTSMo6qP1gsZXx1Zlc/xWCAs9AuYhaQbgFv5N9fk=
- if (fehler == nil) {
- if (ans != nil) {
- ...
- // AES 256 bit
- NSString *key = @"65t4jh%&ghjrbfjdghdjvhfjdfbvnvhj"; // 32 bit key
- NSData *strToNSData = [ans dataUsingEncoding:NSUTF8StringEncoding];
- NSLog(@"-> strToNSData: %@", strToNSData);
- NSString *decryptDataToNSString = [[[NSString alloc] initWithData:[AES256bit decryptData:strToNSData withKey:key]
- encoding:NSUTF8StringEncoding] autorelease];
- NSLog(@">>>>>>>> encryptStringToNSData -> decryptDataToNSString (unverschlüsselt): %@", decryptDataToNSString); // ??? NULL ???
Der String wird php-seitig mit dem gleichen Passwort verschlüsselt.
Habe ich einen String in ObjC verschlüsselt, so lässt er sich auch wieder korrekt entschlüsseln.
Nur mit dem verschlüsselten "php-String" funktioniert das nicht.
Nachfolgend das php-Skript:
PHP-Quellcode
- $key256 = '65t4jh%&ghjrbfjdghdjvhfjdfbvnvhj'; // Das gleiche Passwort wie in ObjC
- $encryptData = fnEncrypt("Das ist ein verschlüsselter String zum Testen!", $key256);
- echo $encryptData;
- function fnEncrypt($sValue, $sSecretKey)
- {
- return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,
- $sSecretKey, $sValue, MCRYPT_MODE_ECB,
- mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,
- MCRYPT_MODE_ECB), MCRYPT_RAND))));
- }
Nachfolgend noch der ObjC code zum entschlüsseln:
PHP-Quellcode
- #import "NSData-AES.h"
- + (NSData*) decryptData:(NSData*)ciphertext withKey:(NSString*)key;
- {
- // Methodenaufruf in NSData-AES.h zum entschlüsseln des Strings
- return [ciphertext AES256DecryptWithKey:key];
- }
- #import "NSData-AES.h"
- #import <CommonCrypto/CommonCryptor.h>
- - (NSData *)AES256DecryptWithKey:(NSString *)key {
- // '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)
- // fetch key data
- [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
- NSUInteger dataLength = [self length];
- //See the doc: For block ciphers, the output size will always be less than or
- //equal to the input size plus the size of one block.
- //That's why we need to add the size of one block here
- size_t bufferSize = dataLength + kCCBlockSizeAES128;
- void *buffer = malloc(bufferSize);
- size_t numBytesDecrypted = 0;
- CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
- keyPtr, kCCKeySizeAES256,
- NULL, // initialization vector (optional)
- [self bytes], dataLength, // input
- buffer, bufferSize, // output
- &numBytesDecrypted);
- if (cryptStatus == kCCSuccess) {
- //the returned NSData takes ownership of the buffer and will free it on deallocation
- return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
- }
- free(buffer); //free the buffer;
- return nil;
- }
- }
- }
Ich komme hier einfach nicht weiter.
Hat von euch jmd Erfahrung mit der AES-Verschlüsselung?
Das Zusammenspiel zwischen dem PHP-Skript und der iPhone App in ObjC funktioniert bei mir nicht.
Ich bin über jede Hilfe und Anregung sehr Dankbar!
Gerne werde ich von der erarbeiteten Lösung eine kurze Zusammenfassung hinterlassen.
Vielen Dank euch allen!
Schönen Gruss!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von OsnaTiger ()
