AES-string-Verschlüsselung in Objective-C
Meine Objective-C App benötigt text - /string-Verschlüsselung (speziell nsstring).
Ich weiß AES ist die sicherste Verschlüsselungsmethode verfügbar für den Verbraucher. Ich verstehe auch, wie konvertieren von Zeichenfolgen zu Daten und zurück... (nur Anfänger).
Viele Webseiten und Q/Als über die Verschlüsselung mit AES unklar sind, und keiner von Ihnen Stand, wie den code zu verwenden gegeben. Zum Beispiel, eine Webseite könnte sagen: "hier ist der code... hier ist, was es tut...", aber keine Erklärung dafür, wie es zu benutzen.
Ich habe festgestellt, das der code durch viel Forschung:
#import "<CommonCrypto/CommonCryptor.h>"
@implementation NSMutableData(AES)
Für die Verschlüsselung:
- (NSMutableData*) EncryptAES:(NSString *)key {
char keyPtr[kCCKeySizeAES256+1];
bzero( keyPtr, sizeof(keyPtr) );
[key getCString: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF16StringEncoding];
size_t numBytesEncrypted = 0;
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
NSMutableData *output = [[NSData alloc] init];
CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self mutableBytes], [self length], buffer, bufferSize, &numBytesEncrypted);
output = [NSMutableData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
if(result == kCCSuccess) {
return output;
}
return NULL;
}
Zur Entschlüsselung:
- (NSMutableData*)DecryptAES: (NSString*)key andForData:(NSMutableData*)objEncryptedData {
char keyPtr[kCCKeySizeAES256+1];
bzero( keyPtr, sizeof(keyPtr) );
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF16StringEncoding];
size_t numBytesEncrypted = 0;
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer_decrypt = malloc(bufferSize);
NSMutableData *output_decrypt = [[NSData alloc] init];
CCCryptorStatus result = CCCrypt(kCCDecrypt , kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self mutableBytes], [self length], buffer_decrypt, bufferSize, &numBytesEncrypted);
output_decrypt = [NSMutableData dataWithBytesNoCopy:buffer_decrypt length:numBytesEncrypted];
if(result == kCCSuccess) {
return output_decrypt;
}
return NULL;
}
}
Dies ist der code, den ich gemacht, dass ich möchte, um zu entsprechen mit dem obigen code:
- (void)Encrypt {
//Convert NSString to NSData so that it can be used to encrypt the Input
NSString *Input = [Inputbox text];
NSData *InputData = [Input dataUsingEncoding:NSUTF8StringEncoding];
//What to do here
}
Wie verwende ich diesen code, diese Methoden? Wohin geht es in meiner Umsetzung-Datei?
- Hi @RazorSharp - migriert haben Sie hier Ihre Frage (Stack-Overflow). Fragen, auf immer code arbeiten jeglicher Art, kryptographische oder anderweitig, am besten beantwortet werden, hier gibt es einen großen pool von Leuten hier, die helfen können, aber wenn Sie wollen, zu Fragen, über die details der algorithmen, Polstern etc verwendet, dann crypto ist der Ort für Sie!
- Ein wichtiger Aspekt beim design zu beachten ist, dass der Verschlüsselungs-Algorithmus ist nur ein Teil der Lösung. Key management ist sehr wichtig, und kann leicht die schwächste Stelle im system ist. Es gibt einige gute Bücher gibt, die auf diese Art der Sache (zB. Schneier), und viele Artikel über design. Einige der Forschung, jetzt kann sparen eine Menge Arbeit später.
- github.com/Gurpartap/AESCrypt-ObjC für quick-AES-256-CBC cipher-und Base64-Kodierung basierende Verschlüsselung/Entschlüsselung. Sie können die gleiche Verschlüsselung und Codierung für die Verwendung an off-Gerät Verarbeitung (server, etc).
- eventuell fehlende free(buffer) / free(buffer_decrypt), wenn Ergebnis != kCCSuccess?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Linie in der Nähe der Spitze, sagt Sie hinzufügen AES-Funktionalität zu NSMutableData:
In Objective-C, das heißt eine Kategorie; Kategorien können Sie eine vorhandene Klasse erweitern.
Dieser code würde normalerweise gehen Sie in eine Datei namens NSMutableData-AES.m. Erstellen Sie eine header-Datei zu, NSMutableData-AES.h. Es sollte enthalten:
Include (#import), die header in der main Datei. Fügen Sie einen Aufruf an die Verschlüsselungs-Funktion in Ihrem code:
Ähnlich wie für die Entschlüsselung.
Da dies anscheinend ignoriert so weit:
In der header-Datei CommonCrypto/CommonCryptor.h:
NULL Fett entspricht der IV. Traurig, wer entwickelt die API machte es optional. Dies macht die CBC-Modus im wesentlichen äquivalent zu der EZB, was nicht empfehlenswert ist für eine Vielzahl von Gründen.
Bekam ich den Erfolg mit AES mit der folgenden codes:
Header-Datei
Umsetzung-Datei
IOS TESTEN
Schließlich die tests Ausgänge:
IOS-AUSGABE