Exemple #1
0
        public static bool ConfirmEcbMode(int blockSize)
        {
            var b = SecureRng.GenerateRandomBytes(blockSize);
            var duplicateBlocks = new List <byte>();

            duplicateBlocks.AddRange(b);
            duplicateBlocks.AddRange(b);
            var encrypted = EncryptionOracle(duplicateBlocks.ToArray());

            return(AesEcb.IsEcbEncrypted(encrypted, blockSize));
        }
Exemple #2
0
        public static CipherMode EncryptEcbOrCbc(byte[] data, out CipherMode actualMode)
        {
            actualMode = Rand.Next(0, 2) == 0 ? CipherMode.ECB : CipherMode.CBC;
            var key = SecureRng.GenerateRandomBytes(KeySizeBytes);

            // Add prefix and suffix to data
            data = TransformData(data);
            byte[] encrypted;
            if (actualMode == CipherMode.ECB)
            {
                var padded = PaddingUtil.Pad(data, BlockSizeBytes);
                encrypted = AesEcb.Encrypt(key, padded);
            }
            else
            {
                var iv = SecureRng.GenerateRandomBytes(BlockSizeBytes);
                encrypted = AesCbc.Encrypt(key, iv, data);
            }
            var guessedMode = AesEcb.IsEcbEncrypted(encrypted, BlockSizeBytes)
                ? CipherMode.ECB
                : CipherMode.CBC;

            return(guessedMode);
        }