/// <summary> /// Initializes with a hexadecimal DES key. /// </summary> /// <param name="text">Hexadecimal representation of the DES key.</param> private void Init(string text) { Guard.IsTrue(text.IsHex(), "Key is not hexadecimal."); Guard.IsOneOfSupplied <int>(text.Length, new List <int>() { 16, 32, 48 }, "Key must be 16, 32 or 48 hexadecimal characters"); text = text.ToUpper(); switch (text.Length) { case 16: _keyA = text; _keyB = _keyA; _keyC = _keyA; _keyType = DesKeyType.SingleLength; break; case 32: _keyA = text.Substring(0, 16); _keyB = text.Substring(16, 16); _keyC = _keyA; _keyType = DesKeyType.DoubleLength; break; default: _keyA = text.Substring(0, 16); _keyB = text.Substring(16, 16); _keyC = text.Substring(32, 16); _keyType = DesKeyType.TripleLength; break; } }
/// <summary> /// Creates a new random DES key. /// </summary> /// <param name="type">The DES key type (single, double or triple length).</param> public DESKey(DesKeyType type) { switch (type) { case DesKeyType.SingleLength: Init(GetRandomHex()); break; case DesKeyType.DoubleLength: Init(GetRandomHex() + GetRandomHex()); break; default: Init(GetRandomHex() + GetRandomHex() + GetRandomHex()); break; } }