最近我正在實現一個使用3DES的加密算法。但是,我發現4096數據塊的前8個字節總是被損壞。但可以肯定的是,它可以在java中正確解密。以下是我的代碼:CCCryptor 3DES解密的前8個字節總是被損壞?
+ (void) DecryptBy3DES:(NSInputStream*)strmSrc Output:(NSOutputStream*)strmDest CryptoRef:(CCCryptorRef)tdesCrypto
{
size_t dataOutMoved;
uint8_t inputBuf[BlockSize];
uint8_t outputBuf[BlockSize];
CCCryptorStatus cryptStatus;
int iBytesRead = 0;
int iBuffUsed = 0;
while ((iBytesRead = [strmSrc read:inputBuf maxLength:BlockSize]) > 0)
{
cryptStatus = CCCryptorUpdate(tdesCrypto, &inputBuf, iBytesRead, &outputBuf, BlockSize, &dataOutMoved);
assert(cryptStatus==noErr);
[strmDest write:outputBuf maxLength:dataOutMoved];
}
CCCryptorReset(tdesCrypto, nil);
}
其中的塊大小爲4096
我重用CCCryptoRef tdesCrypto解密幾個街區。第一個要解密的塊是正確的,但是下面的塊在開始時都有損壞的字節。我也嘗試重置CCCryptoRef,這似乎是徒勞的。
我真的很困惑。任何人都有同樣的問題?
好吧,我找到原因... –
不要讓我們猜測。是什麼原因?錯誤的IV? – SquareRootOfTwentyThree
如果第一個塊是正確的,那麼它可能使用零IV。後續塊不正確可能會使用錯誤的模式。 Zero IV CBC,使用ECB解密會產生這些症狀。 – rossum