Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Diagnostics;
- using System.Security.Cryptography;
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Main(string[] args)
- {
- Stopwatch sw = new Stopwatch();
- sw.Start();
- for (var i = 0; i < 100000; i++)
- {
- secgen(10, 6000000);
- }
- sw.Stop();
- Console.WriteLine(sw.ElapsedMilliseconds);
- sw.Reset();
- sw.Start();
- for (var i = 0; i < 100000; i++)
- {
- secgen2(10, 6000000);
- }
- sw.Stop();
- Console.WriteLine(sw.ElapsedMilliseconds);
- Console.ReadKey();
- }
- private static int secgen2(int minvalue, int maxvalue)
- {
- Func<int, int, int, int> modular = (a, b, mod) =>
- {
- var rem = a + b%mod;
- if (rem < minvalue) rem += minvalue;
- return rem;
- };
- byte[] entropyBytes = new byte[257];
- RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
- rng.GetBytes(entropyBytes);
- int value = entropyBytes[0];
- for (int i = 1; i < 257; i++)
- {
- value = modular(value, entropyBytes[i], maxvalue);
- }
- //MessageBox.Show(value.ToString());
- return value;
- }
- private static int secgen(int minvalue, int maxvalue)
- {
- Func<int, int, int, int> modular = (a, b, mod) =>
- {
- long rem;
- Math.DivRem((long) a + (long) b, (long) mod, out rem);
- if (rem < minvalue) rem += minvalue;
- return (int) rem;
- };
- byte[] entropyBytes = new byte[257];
- RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
- rng.GetBytes(entropyBytes);
- int value = entropyBytes[0];
- for (int i = 1; i < 257; i++)
- {
- value = modular(value, entropyBytes[i], maxvalue);
- }
- //MessageBox.Show(value.ToString());
- return value;
- }
- }
- }
- // Outputs:
- //
- // 2083
- // 921
Add Comment
Please, Sign In to add comment