Warum gibt mein initwithData NIL zurück, der einen Fehler nach dem Umwandlung von NSDATA in NSString angibt, der von CommonCrypto aus der Verschlüsselung zurückkehrt?

StackOverflow https://stackoverflow.com/questions/8815570

Frage

Hier ist mein Code:

-(IBAction)encryptText:(id)sender
{
key = self.tvKey.text;

CCCryptorStatus status = kCCSuccess;                                        
algorithm = kCCAlgorithmAES128;                                                
CCOptions opts = kCCOptionPKCS7Padding;

NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];

NSString *plainString = [NSString stringWithFormat:@"%@", self.tvEntryText.text];
NSData *plainData = [plainString dataUsingEncoding:NSUTF8StringEncoding];

NSData *encryptedData = [plainData dataEncryptedUsingAlgorithm: algorithm     
                                                           key: keyData       
                                          initializationVector: nil             
                                                       options: opts           
                                                         error: &status];    


if ( status != kCCSuccess ) {
    NSError * err = [NSError errorWithCCCryptorStatus: status];
    self.lblKeyMsg.text = [NSString stringWithFormat:@"Encryption failed: %s", [[err localizedDescription] UTF8String]];
    self.lblKeyMsg.textColor = [UIColor redColor];
    return;
}

NSString *encryptedString = [[[NSString alloc] initWithData:encryptedData encoding:NSUTF8StringEncoding] autorelease];
self.tvResultText.text = encryptedString;

}

Die zweite zuletzte Aussage, die ich die verschlüsselte NSData für Anzeigzwecke in ein NSString umwandle, kommt aber Null zurück. NIL ist eine gültige Antwort und Fehler. Ich habe die Ausführung gleich nach dieser Aussage gestoppt und hier sind die Vaues:

(gdb) po keyData
<61616161 61616161 61617373 73737373 73737373 64646464 64646464 64646666>
(gdb) po key
aaaaaaaaaassssssssssddddddddddff
(gdb) po plainString
this is a test.
(gdb) po plainData
<74686973 20697320 61207465 73742e>
(gdb) po encryptedData
<f7074146 b295e340 0d947d53 9ea629cf>
(gdb) po encryptedString
Can't print the description of a NIL object.
(gdb) po status
Can't print the description of a NIL object.
(gdb) 

Der Status zeigt NIL an, dass in der Verschlüsselung kein Fehler vorliegt. Alle Werte scheinen wie erwartet zu sein, aber die InitwithData schlägt fehl. Hier ist der Vorgang iPhone Ansicht:

The app screen when Encrypt button is pressed

Warum scheitert die InitwithData hier?

War es hilfreich?

Lösung

Wie die Dokumentation sagt, initWithData:encoding: kann NIL zurückgeben, wenn die übergebenen Daten keine gültigen Daten für die Codierung sind. Im Gegensatz zu einigen Codierungen können Sie nicht nur willkürliche Daten aufnehmen und so tun, als ob es sich um UTF8 -Daten handelt - sie muss der UTF8 -Spezifikation entsprechen.

Dein encryptedData Das NSDATA -Objekt enthält scheinbar zufällige Daten - sehr unwahrscheinlich, dass es gültige UTF8 -Daten ist und so initWithData:encoding: ist sehr wahrscheinlich scheitern.

Wenn Sie nur nach etwas suchen, das Sie in einem Textfeld kleben können, möchten Sie möglicherweise versuchen, die verschlüsselten Daten zu kodieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top