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

DesKeyGenerator

using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; using System; namespace Org.BouncyCastle.Crypto.Generators { public class DesKeyGenerator : CipherKeyGenerator { public DesKeyGenerator() { } internal DesKeyGenerator(int defaultStrength) : base(defaultStrength) { } protected override void EngineInit(KeyGenerationParameters parameters) { base.EngineInit(parameters); if (strength == 0 || strength == 7) strength = 8; else if (strength != 8) { throw new ArgumentException("DES key must be " + 64.ToString() + " bits long."); } } protected override byte[] EngineGenerateKey() { byte[] array = new byte[8]; do { random.NextBytes(array); DesParameters.SetOddParity(array); } while (DesParameters.IsWeakKey(array, 0)); return array; } protected override KeyParameter EngineGenerateKeyParameter() { return KeyParameter.Create(strength, random, delegate(Span<byte> bytes, SecureRandom random) { do { random.NextBytes(bytes); DesParameters.SetOddParity(bytes); } while (DesParameters.IsWeakKey(bytes)); }); } } }