最近我正在实现一个使用 3DES 的加密算法。但是,我发现4096数据块的前8个字节总是损坏。但可以肯定的是,它可以在java中正确解密。以下是我的代码:
+ (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);
}
其中 BlockSize 为 4096。
我重用了 CCCryptoRef tdesCrypto 来解密几个块。第一个要解密的块是正确的,但后面的块在开始时都有损坏的字节。我还尝试重置 CCCryptoRef,这似乎是徒劳的。
我真的很困惑。有人有同样的问题吗?