/// <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))); }
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)); }