<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" />

DesParameters

public class DesParameters : KeyParameter
using System; namespace Org.BouncyCastle.Crypto.Parameters { public class DesParameters : KeyParameter { public const int DesKeyLength = 8; private const int N_DES_WEAK_KEYS = 16; private static readonly byte[] DES_weak_keys = new byte[128] { 1, 1, 1, 1, 1, 1, 1, 1, 31, 31, 31, 31, 14, 14, 14, 14, 224, 224, 224, 224, 241, 241, 241, 241, 254, 254, 254, 254, 254, 254, 254, 254, 1, 254, 1, 254, 1, 254, 1, 254, 31, 224, 31, 224, 14, 241, 14, 241, 1, 224, 1, 224, 1, 241, 1, 241, 31, 254, 31, 254, 14, 254, 14, 254, 1, 31, 1, 31, 1, 14, 1, 14, 224, 254, 224, 254, 241, 254, 241, 254, 254, 1, 254, 1, 254, 1, 254, 1, 224, 31, 224, 31, 241, 14, 241, 14, 224, 1, 224, 1, 241, 1, 241, 1, 254, 31, 254, 31, 254, 14, 254, 14, 31, 1, 31, 1, 14, 1, 14, 1, 254, 224, 254, 224, 254, 241, 254, 241 }; public DesParameters(byte[] key) : base(key) { if (IsWeakKey(key)) throw new ArgumentException("attempt to create weak DES key"); } public DesParameters(byte[] key, int keyOff, int keyLen) : base(key, keyOff, keyLen) { if (IsWeakKey(key, keyOff)) throw new ArgumentException("attempt to create weak DES key"); } public static bool IsWeakKey(byte[] key, int offset) { if (key.Length - offset < 8) throw new ArgumentException("key material too short."); for (int i = 0; i < 16; i++) { bool flag = false; for (int j = 0; j < 8; j++) { if (key[j + offset] != DES_weak_keys[i * 8 + j]) { flag = true; break; } } if (!flag) return true; } return false; } public static bool IsWeakKey(byte[] key) { return IsWeakKey(key, 0); } public static byte SetOddParity(byte b) { uint num = (uint)(b ^ 1); num ^= num >> 4; num ^= num >> 2; num ^= num >> 1; num &= 1; return (byte)(b ^ num); } public static void SetOddParity(byte[] bytes) { for (int i = 0; i < bytes.Length; i++) { bytes[i] = SetOddParity(bytes[i]); } } public static void SetOddParity(byte[] bytes, int off, int len) { for (int i = 0; i < len; i++) { bytes[off + i] = SetOddParity(bytes[off + i]); } } } }