/// <summary>
        /// Encrypt data under this key.
        /// </summary>
        /// <param name="data">16, 32 or 48 hex data to encrypt.</param>
        /// <returns>Encrypted data.</returns>
        public string Encrypt(string data)
        {
            ValidateEncryptDecryptData(data);

            if (data.Length == 16)
            {
                return(TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data));
            }

            if (data.Length == 32)
            {
                return(TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(0, 16)) +
                       TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(16, 16)));
            }

            return(TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(0, 16)) +
                   TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(16, 16)) +
                   TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(32, 16)));
        }
        /// <summary>
        /// Encrypt data under this key using CBC mode.
        /// </summary>
        /// <param name="data">16, 32 or 48 hex data to encrypt.</param>
        /// <returns>Encrypted data.</returns>
        public string EncryptCbc(string data)
        {
            ValidateEncryptDecryptData(data);

            if (data.Length == 16)
            {
                return(TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data));
            }

            if (data.Length == 32)
            {
                var resulta1 = TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(0, 16));
                return(resulta1 + TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(16, 16).XorHex(resulta1)));
            }

            var resulta2 = TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(0, 16));
            var resultb  = TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(16, 16).XorHex(resulta2));

            return(resulta2 + resultb + TripleDes.TripleDesEncrypt(PartA, PartB, PartC, data.Substring(32, 16).XorHex(resulta2)));
        }
예제 #3
0
 public void TestTripleDes(byte[] key1, byte[] key2, byte[] key3, byte[] data, byte[] expected)
 {
     Assert.AreEqual(expected, TripleDes.TripleDesEncrypt(key1, key2, key3, data));
     Assert.AreEqual(data, TripleDes.TripleDesDecrypt(key1, key2, key3, expected));
 }