【问题标题】:iOS AES 256 Decryption not working in swiftiOS AES 256 解密不能快速工作
【发布时间】:2020-06-09 10:29:40
【问题描述】:

我有一些数据将在 JSON 响应中加密的场景。 所以我尝试了一些库来快速解密。 但最终我没能做到。

所以我尝试了这个库 WebCryptohttps://github.com/etienne-martin/WebCrypto.swift

这工作正常,但调用是异步的,我需要同步。

我之前试过这些

  1. RNCryptorhttps://github.com/RNCryptor/RNCryptor
  2. CryptoSwifthttps://github.com/krzyzanowskim/CryptoSwift

RNCryptor:代码

    import RNCryptor

class DemoRNCryptor {

    class func run() {

        // Encryption

        let data = "my message is not ready".data(using: String.Encoding.utf8)!
        let password = "MySecretKey12345"
        let encryptedData = RNCryptor.encrypt(data: data, withPassword: password)
        print("RNCryptor enc:", encryptedData.hexString)


        // Decryption

        do {
            let originalData = try RNCryptor.decrypt(data: encryptedData, withPassword: password)
            let dd = String(data: originalData, encoding: .utf8)
            print("RNCryptor dec:", dd)
        } catch {
            print(error)
        }
    }
    }

CryptoSwift:代码

import CryptoSwift


    extension String {

    func aesEncryptCS(key: String) throws -> String {

        var result = ""

        do {

            let key: [UInt8] = Array(key.utf8) as [UInt8]
            let aes = try AES(key: key, blockMode: ECB(), padding: .pkcs5) // AES128 .ECB pkcs7
            let encrypted = try aes.encrypt(Array(self.utf8))

            result = encrypted.toBase64()!

            print("AES Encryption Result: \(result)")

        } catch {

            print("Error: \(error)")
        }

        return result
    }

    func aesDecryptCS(key: String) throws -> String {

        var result = ""

        do {

            let encrypted = self
            let key: [UInt8] = Array(key.utf8) as [UInt8]
            let aes = try AES(key: key, blockMode: ECB(), padding: .pkcs5) // AES128 .ECB pkcs7
            let decrypted = try aes.decrypt(Array(base64: encrypted))

            result = String(data: Data(decrypted), encoding: .utf8) ?? ""

            print("AES Decryption Result: \(result)")

        } catch {

            print("Error: \(error)")
        }

        return result
    }

}

我有钥匙 = “消息” 和 加密文本(“我的消息尚未准备好”)=“U2FsdGVkX187YbST7kZBjdhI6tGa2YQE5e3bS4WNhaXgi0iy//q5TOfR/q6Sc1Lx

如何使用以上两个库中的任何一个来解密这个字符串?

我总是得到 nil 或无效的密钥大小。

【问题讨论】:

  • 你好,你是怎么解决的?
  • 时间不多,你可以看看下面的答案
  • 我解决了,罪魁祸首是在发送加密之前进行了十六进制转换!这是史诗般的,没有人在任何地方提到过真正的客户端-服务器加密:)
  • @Mukesh:你也能回答吗?这对其他人也有帮助。

标签: ios swift encryption rncryptor cryptoswift


【解决方案1】:

“U2FsdGVkX187YbST7kZBjdhI6tGa2YQE5e3bS4WNhaXgi0iy//q5TOfR/q6Sc1Lx”

这是Base64编码的数据,需要先解码,例如:

let encrypted = [UInt8](base64: "U2FsdGVkX187YbST7kZBjdhI6tGa2YQE5e3bS4WNhaXgi0iy//q5TOfR/q6Sc1Lx")

key = "消息"

假设这实际上是您使用的密钥:

let key = "Message".bytes

这给了我们:

let key = "Message".bytes

let aes = try AES(key: key, blockMode: ECB(), padding: .pkcs5)
let encrypted = try aes.encrypt("some string".bytes))
let encryptedBase64 = encrypted.toBase64()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多