【问题标题】:Swift - AES base64 + md5 decryptionSwift - AES base64 + md5 解密
【发布时间】:2020-06-29 05:44:30
【问题描述】:

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

我们的服务器和我的 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 哈希。

【问题讨论】:

  • Swift AES Encryption,Kotlin AES Encryption
  • @KasımÖzdemir 什么是盐?此外,我在那里没有看到任何 md5 参考
  • 使用了Salt,因此相同的密码并不总是生成相同的密钥。添加了另一层安全性。 MD5 算法以一种方式工作。加密已完成,但无法解密。使用Brute Force攻击只有解决的可能,但是由于Brute Force攻击使用试错法,解密密码需要很长时间。
  • @KasımÖzdemir 但在我发布的示例(链接)中,他们不使用盐。他们只使用密钥(密码)和 IV。如何使其适应 swift 代码?谢谢!

标签: swift md5 cryptoswift


【解决方案1】:

试试这个..

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
}

【讨论】:

    【解决方案2】:

    你需要做一些事情:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-24
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      相关资源
      最近更新 更多