使用CommonCrypto进行AES解密-缺少某些字符

时间:2019-06-19 02:23:10

标签: swift encryption aes cbc-mode

{
  "order_id": 5,
  "no": "19000038",
  "id": 10,
  "name": "John Doe"
}

我使用在线AES加密网站对上述数据进行加密,该网站是: https://www.devglan.com/online-tools/aes-encryption-decryption

使用CBC模式,256键大小和Base64输出文本格式。我通过以下链接通过@ / backslash-f复制了Playground: AES encryption in swift

以下是我编写解密加密数据的方式:

let stringData = Data(base64Encoded: stringValue, options: .ignoreUnknownCharacters)

            do {
                let aes = try AES(keyString: key)

                let decryptedData: String = try aes.decrypt(stringData!)
                print("String decrypted:\t\t\t\(decryptedData)")
            }
            catch {
                print("Something went wrong: \(error)")
            }

数据已成功解密,但缺少字符。以下是解密后的数据(如代码中所示):

String decrypted:           ,

"order_no": "19000038",

"id": 10,

"name": "John Doe"

}

如您所见,第一个大括号,直到缺少“ order_id”:5 。有谁知道为什么会这样以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

找出问题所在。这是填充问题。 CommonCrypto默认将填充设置为pkcs7,我们无法对其进行更改。然后,我使用CryptoSwift库并将padding更改为noPadding,然后它就像超级按钮一样工作!