当前位置: 首页 > 知识库问答 >
问题:

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

陆琦
2023-03-14
{
  "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:swift中的AES加密

下面是我如何对加密数据进行解密的:

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\u id”:5之前的第一个花括号丢失。有人知道为什么会发生这种情况以及如何解决吗?

共有1个答案

叶德本
2023-03-14

解决了问题。这是填充问题。CommonCrypto默认情况下将padding设置为pkcs7,我们无法更改它。然后,我使用CryptoSwift库并将填充改为noPadding,然后它就像咒语一样工作!

 类似资料:
  • 问题内容: 有没有一个很好的示例,说明如何在Android上使用AES 加密和解密图像及其他文件? 问题答案: 并像这样调用它们: 这应该可行,我现在在项目中使用类似的代码。

  • 问题内容: 这是我正在做的事情,可能看起来有些笨拙,但是可以帮助您解决该问题。我得到一个。阅读几乎所有相关主题,但找不到合适的解决方案。我是加密解密程序设计的新手,需要在我的Java应用程序之一中实现它。 谢谢..这就是代码的样子.... 问题答案: 在这里,您需要了解的是密文可能包含不可打印的字符。因此,当您使用readLine()时,它可能不会为您提供文件中的所有字节。 同样,它并没有给您您认

  • 以下是我的加密/解密方法: 所以现在当我尝试加密时,我得到了这个异常: 我已经尝试在encrypt和Decrpt中使用密码实例。它只用于加密而不用于解密。我认为需要填充,因为数据大小不是16字节的倍数。“data”字节长度打印为,因此尝试将字符附加到数据中,然后进行加密,但也不起作用。

  • 问题内容: 我必须使用openssl命令行或C api加密xml文件。输出应为Base64。 一个Java程序将用于解密。该程序由客户提供,不能更改(他们正在将这些代码用于旧版应用程序)。正如您在下面的代码中看到的那样,客户提供了一个密码短语,因此将使用SecretKeySpec方法生成密钥。 Java代码: 我已经测试了几个命令,例如: 但是,使用Java无法成功解密给定的输出。为了进行测试,我

  • 我正在尝试将我的应用程序从128位AES密钥升级为256位AES。然而,当我将第54行从128更改为256时,我会得到以下密钥大小错误。 java.security.无效密钥异常: 非法的密钥大小 我已正确安装了JCE文件,我的应用程序生成较长的密钥这一事实证明了这一点。 我在其他文章中看到过“AES / CBC / PKCS7Padding”加密方法,但这只会让我遇到这个例外:

  • 问题内容: 我之所以写这个问题+答案,是因为我挣扎了很多(也许是因为缺乏经验),并迷失了使用node或python进行加密/解密的许多不同方式。 我以为我的案子将来可以帮助人们。 我需要做的是: 从表单获取数据,使用Crypto(node-js)对其进行加密 在Python中传递加密的数据,然后使用PyCrypto将其解密。 我选择使用AES加密。 这是我的开始方式(我不会尝试的所有事情): 我遵