예제 #1
0
        static void Main(string[] args)
        {
            byte[] key = ConvertHexStringToBytes(KEY);
            byte[] iv  = ConvertHexStringToBytes(IV);

            for (int i = 2; i <= 5; i++)
            {
                try
                {
                    PADDING = (PaddingMode)i;


                    //Encrypt
                    Byte[] encrypted = EncryptStringToBytes(PLAIN_TEXT, key, iv);

                    //Decrypt
                    string roundtrip = DecryptStringFromBytes(encrypted, key, iv);

                    Console.WriteLine(PADDING.ToString() + " : " + Convert.ToBase64String(encrypted));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
예제 #2
0
    public static bool TestAlgorithms(SymmetricAlgorithm encAlgorithm, SymmetricAlgorithm decAlgorithm, CipherMode[] modes, int maxLength, int iterations)
    {
        Random rand = new Random();

        for (int i = 0; i < iterations; i++)
        {
            // Create random data, key, IV, mode
            //
            byte[] key = new byte[KeySizeBytes[rand.Next(KeySizeBytes.Length)]];
            rand.NextBytes(key);

            byte[] data = new byte[rand.Next(1, maxLength + 1)];
            rand.NextBytes(data);

            byte[] IV = new byte[BlockSizeBytes];
            rand.NextBytes(IV);

            CipherMode  mode    = modes[rand.Next(modes.Length)];
            PaddingMode padding = PaddingModes[new Random().Next(PaddingModes.Length)];

            // Encrypt the data
            //
            byte[] encryptedData;
            encAlgorithm.Key     = key;
            encAlgorithm.IV      = IV;
            encAlgorithm.Mode    = mode;
            encAlgorithm.Padding = padding;

            ICryptoTransform transform = encAlgorithm.CreateEncryptor();
            encryptedData = transform.TransformFinalBlock(data, 0, data.Length);

            // Decrypt the data
            //
            byte[] decryptedData;
            decAlgorithm.Key     = key;
            decAlgorithm.IV      = IV;
            decAlgorithm.Mode    = mode;
            decAlgorithm.Padding = padding;

            transform     = decAlgorithm.CreateDecryptor();
            decryptedData = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);

            if (!CompareBytes(data, decryptedData))
            {
                Console.WriteLine("ERROR - roundtrip encrypt/decrypt failed!\n");
                Console.WriteLine("Encryption algorithm: {0}", encAlgorithm.ToString());
                Console.WriteLine("Decryption algorithm: {0}", decAlgorithm.ToString());
                Console.WriteLine("Original data: {0}", ByteArrayToString(data));
                Console.WriteLine("Roundtrip data: {0}", ByteArrayToString(decryptedData));
                Console.WriteLine("Key: {0}", ByteArrayToString(key));
                Console.WriteLine("IV: {0}", ByteArrayToString(IV));
                Console.WriteLine("Cipher mode: {0}", mode.ToString());
                Console.WriteLine("Padding mode: {0}", padding.ToString());
                return(false);
            }
        }

        return(true);
    }
예제 #3
0
        public void Probe(ProbeContext context)
        {
            var scope = context.CreateScope("aes");

            scope.Add("paddingMode", _paddingMode.ToString());

            _secureKeyProvider.Probe(scope);
        }
예제 #4
0
    public static bool PaddingTest(Aes aes, PaddingMode mode, int offset, byte[] expected)
    {
        if (!CompareBytes(GetPaddingBytes(aes, mode, offset), expected))
        {
            Console.WriteLine("Error - padding failure");
            Console.WriteLine("Algorithm: {0}", aes.ToString());
            Console.WriteLine("Padding Mode: {0}", mode.ToString());
            Console.WriteLine("Block Size: {0}", BlockSizeBytes + offset);
            return(false);
        }

        return(true);
    }
 public void Probe(ProbeContext context)
 {
     context.Add("defaultKeyId", _defaultKeyId);
     context.Add("paddingMode", _paddingMode.ToString());
 }
예제 #6
0
	public static bool PaddingTest(Aes aes, PaddingMode mode, int offset, byte[] expected)
	{
		if (!CompareBytes(GetPaddingBytes(aes, mode, offset), expected))
		{
			Console.WriteLine("Error - padding failure");
			Console.WriteLine("Algorithm: {0}", aes.ToString());
			Console.WriteLine("Padding Mode: {0}", mode.ToString());
			Console.WriteLine("Block Size: {0}", BlockSizeBytes + offset);
			return false;
		}

		return true;
	}
예제 #7
0
		private void WriteByte (PaddingMode mode, bool padded)
		{
			byte[] Key = new byte[16];
			byte[] IV = new byte[16];
			byte[] Buffer = new byte[64];

			Rijndael alg = Rijndael.Create ();
			alg.Mode = CipherMode.CBC;
			alg.Padding = mode;

			MemoryStream cms = new MemoryStream ();
			ICryptoTransform ct = alg.CreateEncryptor (Key, IV);
			CryptoStream cs = new CryptoStream (cms, ct, CryptoStreamMode.Write);
			for (int i = 0; i < Buffer.Length; i++)
				cs.WriteByte (Buffer[i]);
			cs.Close ();

			byte[] result = cms.ToArray ();
			// if padded then add one block, if not then it's the original length
			int len = padded ? 80: 64;
			Assert.AreEqual (len, result.Length, mode.ToString () + ".Encrypted.Length");

			cms = new MemoryStream ();
			ct = alg.CreateDecryptor (Key, IV);
			cs = new CryptoStream (cms, ct, CryptoStreamMode.Write);
			for (int i = 0; i < result.Length; i++)
				cs.WriteByte (result[i]);
			cs.Close ();

			byte[] plaintext = cms.ToArray ();
			Assert.AreEqual (64, plaintext.Length, mode.ToString () + ".Decrypted.Length");

			Assert.AreEqual (Buffer, plaintext, mode.ToString () + ".Date");
		}
예제 #8
0
 public Encrypter(string iv, string key, CipherMode mode = CipherMode.CBC, PaddingMode padding = PaddingMode.PKCS7, Func <string, string> hashProvider = null)
 {
     m_IV           = Convert.FromBase64String(iv);
     m_Key          = Convert.FromBase64String(key);
     m_Mode         = mode;
     m_Padding      = padding;
     m_HashProvider = hashProvider ?? CreateDefaultHashProvider(iv + key + mode.ToString() + padding.ToString());
 }