【问题标题】:aes encrytion - content size not in multiples of 16bytesaes 加密 - 内容大小不是 16 字节的倍数
【发布时间】:2014-03-08 04:49:39
【问题描述】:

我有一个接近 735 字节的数据,当我加密并将其发送到服务器时,服务器能够加密到 720(16 的倍数),但除此之外没有任何其他内容,如何解决这个问题,我需要是一种可以解决这个问题的解决方案。

NSMutableData *cipherData = [NSMutableData dataWithLength: content.length + kCCBlockSizeAES128];
    CCCryptorStatus
    result = CCCrypt(((shouldEncrypt)?kCCEncrypt:kCCDecrypt), // operation
                     kCCAlgorithmAES128, // Algorithm - AES128 means the block size, not the keysize 
                     kCCOptionECBMode, // options
                     key.bytes, // key
                     kCCKeySizeAES256, // keylength
                     NULL,// iv
                     content.bytes, // dataIn
                     content.length, // dataInLength,
                     cipherData.mutableBytes, // dataOut
                     cipherData.length, // dataOutAvailable
                     &outLength); // dataOutMoved

【问题讨论】:

  • 你不能在最后添加一些填充以转到下一个 16 的倍数吗?
  • @FlorentBayle 自己做填充并不难,而且可能不会导致漏洞,但使用平台定义的填充可能会更好。 thndrkiss 注意:ECB 模式不安全。也不会发送没有附加 HMAC 身份验证标签的密文。尽可能使用 TLS。仅使用 AES 并不能使您的协议安全。

标签: java ios iphone aes


【解决方案1】:

在选项中,(二进制)将kCCOptionPKCS7Padding 标志或kCCOptionECBMode 标志。

这将自动将最后一个块填充到块大小。请注意,如果存在整数个块,这也会添加一个完整的块(否则无法将数据与填充区分开来)。

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 2017-08-28
    • 2021-04-21
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多