2016-02-25 2 views
0

Как я могу расшифровать NSData с помощью RNCryptor (AES128CBC)? я уже пытался понять документацию: https://github.com/RNCryptor/RNCryptor-Spec/blob/master/draft-RNCryptor-Spec-v4.0.mdRNCryptor: AES128CBC дешифрование в Swift

Edit:

class Decription{ 
    func AES128(message: String, key: String, iv: String){ 
     let keyData: NSData! = (key as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData! 
     let ivData: NSData! = (iv as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData! 
     let data: NSData! = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData! 
     let cryptData  = NSMutableData(length: Int(data.length) + kCCBlockSizeAES128)! 

     let keyLength    = size_t(kCCKeySizeAES256) 
     let operation: CCOperation = UInt32(kCCDecrypt) 
     let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128) 
     let options: CCOptions = UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding) 

     var numBytesEncrypted :size_t = 0 

     let cryptStatus = CCCrypt(
      operation, 
      algoritm, 
      options, 
      keyData.bytes, 
      keyLength, 
      ivData.bytes, 
      data.bytes, data.length, 
      cryptData.mutableBytes, 
      cryptData.length, 
      &numBytesEncrypted 
     ) 

     if UInt32(cryptStatus) == UInt32(kCCSuccess) { 
      cryptData.length = Int(numBytesEncrypted) 
      print("Decrypted Result = \(NSString(data: cryptData, encoding: NSUTF8StringEncoding))") 
     } else { 
      print("Error: \(cryptStatus)") 
     } 
    } 
} 

Я изменил код сниппета @zaph связанный с. Вы можете увидеть результат выше.

NSString(data: cryptData, encoding: NSUTF8StringEncoding) результаты nil. В чем проблема?

+0

Проблема в том, что не все данные и практически никакие зашифрованные данные могут быть закодированы как UTF-8 или большинство кодировок. Если вам нужен «String» для вывода, используйте кодировку Base64. Для кодировки Base64 используйте: 'func base64EncodedStringWithOptions (_ options: NSDataBase64EncodingOptions) -> String'. – zaph

+0

Результат должен быть UTF-8, это строка JSON. –

+0

Base64 состоит из символов UTF-8, вы помещаете закодированную в Base64 строку в JSON. Другим вариантом является шестнадцатеричное кодирование зашифрованных данных и размещение этой строки в JSON, но в наши дни это менее распространено. – zaph

ответ

1

Сначала вы шифруете, используя RNCryptor, а не какой-либо другой метод, потому что RNCryptor - это больше, чем просто шифрование AES, это целый безопасный метод шифрования, включающий в себя вывод ключей и аутентификацию. См. RNCryptor-Spec для получения дополнительной информации.

Если вы просто хотите использовать расшифровку, используйте Common Crypto с Swift, например, код SO Answer.

Примечание: образец кода - это то, что он не должен использоваться как-есть в производственном коде. В частности, режим ECB небезопасен, используйте CBC со случайным iv и подумайте над добавлением аутентификации и вывода ключей к паролю, например PBKDF2.

+0

Спасибо. Вы можете найти новый фрагмент кода в моем ответе. –

Смежные вопросы