首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AES128 CTR模式的CryptoSwift -错误计数器增量?

使用AES128 CTR模式的CryptoSwift -错误计数器增量?
EN

Stack Overflow用户
提问于 2018-10-11 23:22:54
回答 1查看 228关注 0票数 3

在将AES128CTR-Mode和我的测试函数(nullArrayBugTest())一起使用时,我在CryptoSwift-API (krzyzanowskim)上遇到了一个问题,该函数对特定的计数器值(在0和25之间= 13和24)产生错误的数组计数,通常应该是16!即使我使用手动递增的"iv_13“和错误值13,而不是默认的"iv_0”和计数器13...测试一下,以了解我的意思。

代码语言:javascript
复制
  func nullArrayBugTest() {
    var ctr:CTR
    let nilArrayToEncrypt = Data(hex: "00000000000000000000000000000000")
    let key_ = Data(hex: "000a0b0c0d0e0f010203040506070809")
    let iv_0:  Array<UInt8> = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f]
    //let iv_13:  Array<UInt8> = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x1c]
    var decryptedNilArray = [UInt8]()

    for i in 0...25 {
        ctr = CTR(iv: iv_0, counter: i)
        do {
            let aes = try AES(key: key_.bytes, blockMode: ctr)
            decryptedNilArray = try aes.decrypt([UInt8](nilArrayToEncrypt))
            print("AES_testcase_\(i) for ctr: \(ctr) withArrayCount: \(decryptedNilArray.count)")
        }catch {
            print("De-/En-CryptData failed with: \(error)")
        }
    }
}

Output with buggy values

为什么我总是需要具有16个值的加密数组,这个问题并不重要:D.

有人知道为什么aes.decrypt()-function会像我收到的那样处理这个问题吗?

耽误您时间,实在对不起。

迈克尔·S。

EN

回答 1

Stack Overflow用户

发布于 2018-10-12 16:48:10

我猜加密是在没有应用填充的情况下发生的,但是你可以使用填充来解密。要解决此问题,请在两端使用相同的技术。也就是说,这是一个解决方案(@rob-napier的答案更详细):

代码语言:javascript
复制
try AES(key: key_.bytes, blockMode: ctr, padding: .noPadding)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52763700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档