最近、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をリセットしようとしましたが、これは無駄に思えます。
私は本当に混乱しています。誰もが同じ問題を抱えていますか?