在将AES128与CTR-Mode和我的测试函数(nullArrayBugTest())一起使用时,我在CryptoSwift-API (krzyzanowskim)上遇到了一个问题,该函数对特定的计数器值(在0和25之间= 13和24)产生错误的数组计数,通常应该是16!即使我使用手动递增的"iv_13“和错误值13,而不是默认的"iv_0”和计数器13...测试一下,以了解我的意思。
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)")
}
}
}为什么我总是需要具有16个值的加密数组,这个问题并不重要:D.
有人知道为什么aes.decrypt()-function会像我收到的那样处理这个问题吗?
耽误您时间,实在对不起。
迈克尔·S。
发布于 2018-10-12 16:48:10
我猜加密是在没有应用填充的情况下发生的,但是你可以使用填充来解密。要解决此问题,请在两端使用相同的技术。也就是说,这是一个解决方案(@rob-napier的答案更详细):
try AES(key: key_.bytes, blockMode: ctr, padding: .noPadding)https://stackoverflow.com/questions/52763700
复制相似问题