2017-04-17 15 views
0

다음 코드로 128 키를 사용하여 메시지의 암호를 해독하려고합니다. 이것은 문자열의 확장입니다.aes 128 메시지 암호 해독 - Swift, iOS

func aesDecrypt(key:String, iv:String, options:Int = kCCOptionPKCS7Padding) -> String? { 
    if let keyData = key.dataUsingEncoding(NSUTF8StringEncoding), 
     data = NSData(base64EncodedString: self, options: .IgnoreUnknownCharacters), 
     cryptData = NSMutableData(length: Int((data.length)) + kCCBlockSizeAES128) { 

     let keyLength    = size_t(kCCKeySizeAES128) 
     let operation: CCOperation = UInt32(kCCDecrypt) 
     let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128) 
     let options: CCOptions = UInt32(options) 

     var numBytesEncrypted :size_t = 0 

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

     if UInt32(cryptStatus) == UInt32(kCCSuccess) { 
      cryptData.length = Int(numBytesEncrypted) 
      let unencryptedMessage = String(data: cryptData, encoding:NSUTF8StringEncoding) 
      return unencryptedMessage 
     } 
     else { 
      return nil 
     } 
    } 
    return nil 
} 

입력 벡터 (iv)에 대해 nil 값을 사용합니다. crypData가 존재하지만 올바르게 읽을 수 없으며 unencryptedMessage도 마찬가지입니다. 온라인 도구는 데이터가 잘못되었음을 알리지 만 백엔드 쪽에서는 정상적으로 작동합니다.

키 - 값과 메시지 - 값은 base64Url입니다.

사용법 : 롭 말했듯이, 주요 문제는 입력 데이터이었다 2.3

+0

AES 암호화에 대한 표준 설정이나 형식이 없습니다. 암호화 프로그램이 메시지를 구성하는 방법을 정확하게 설명 할 수있는 경우가 아니라면 암호를 해독 할 수 없습니다. 암호화 코드가 있습니까? –

+0

키는 Base64로 인코딩되어 있습니다 (최소한 "base64Url"의 의미라고 가정합니다). 하지만 당신은 그것을 utf-8로 해독하고 있습니다. 가능성이 더 큰 문제 일지 모르지만 그럴 가능성이 가장 큰 문제입니다. –

+0

@zaph 입력 값이 정확하고 백엔드가 자바 라이브러리로 해독 할 수 있음을 의미합니다. ECB 모드가 아니라 CBC 모드입니다. –

답변

0

let decryptedMessage = message.aesDecrypt(keyTodecrypt, iv: nil) 

스위프트. 그래서 메시지와 키를 16 진수 값으로 변환했습니다. 동일한 문제가 발생하면 클라이언트 측과 백엔드 측의 값이 동일한 인코딩 매개 변수를 사용하는지 확인하십시오. 나를 위해 그것은 UTF-8이었습니다. 또한 키 길이를 확인해야합니다.