0

我正在尝试解密从我们的服务器发送的消息。

我们的服务器和我的 Android 客户端都使用这里的加密代码:
https ://gist.github.com/jafetsanchez/1080133

  • 服务器使用 CS 码加密消息
  • 我的 android 客户端使用 java 代码来解密消息

我想用 Swift 将解密功能添加到我的 iPhone 客户端应用程序中。但是我不确定如何使用 iOS 工具来做到这一点。

我正在使用 CryptoSwift

这是我试图做的:

    let iVector: [UInt8] = [
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    ]
    
   let encryptedMessage = "encrypted_message_encrypted_message_encrypted_message_encrypted_message_"
    
    let password = "passwordpassword"

    
    do {
        let aes = try AES(key: password, iv: String(bytes: iVector, encoding: .utf8)!, padding: .pkcs7) // aes128
        let decryptedText = try aes.decrypt(encryptedMessage.bytes)
        let data = Data(bytes: decryptedText, count: decryptedText.count)

        if let string = String(data: data, encoding: .utf8) {
            
            print(string)
        } else {
            
            print("not a valid UTF-8 sequence")
        }
    } catch { }

现在我收到错误: CryptoSwift.AES.Error.dataPaddingRequired

另外,我不确定如何在那里组合 MD5 散列。

4

2 回答 2

0

您需要遵循以下原则:

let password = "passwordpassword".bytes.md5()
let aes = try AES(key: password, blockMode: CBC(iv: iVector), padding: .pkcs7)

在处理数据时,最好仔细遵循数据的格式,无论是String,还是字节,还是Base64。

于 2020-09-01T17:03:48.223 回答
0

尝试这个..

static func encryptMessage(message: String, encryptionKey: String, iv: String) -> String? {
   if let aes = try? AES(key: encryptionKey, iv: iv),
      let encrypted = try? aes.encrypt(Array<UInt8>(message.utf8)) {
      return encrypted.toHexString()
   }
   return nil
}
static func decryptMessage(encryptedMessage: String, encryptionKey: String, iv: String) -> String? {
   if let aes = try? AES(key: encryptionKey, iv: iv),
      let decrypted = try? aes.decrypt(Array<UInt8>(hex: encryptedMessage)) {
      return String(data: Data(decrypted), encoding: .utf8)
   }
   return nil
}
于 2020-06-29T05:57:49.190 回答