⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 big_rand.cpp

📁 含有多种公开密钥算法、多种块加密、多种数据流加密、多种HASH函数、多种CheckSum校验、多种MAC校验等几十种加密算法的程序
💻 CPP
字号:
/************************************************** Random BigInt Generation Source File           ** (C) 1999-2002 The Botan Project                **************************************************/#include <botan/numthry.h>#include <botan/primes.h>namespace Botan {/************************************************** Generate a random integer                      **************************************************/BigInt random_integer(u32bit bits)   {   BigInt x;   x.randomize(bits);   return x;   }/************************************************** Generate a random integer within given range   **************************************************/BigInt random_integer(const BigInt& min, const BigInt& max)   {   BigInt range = max - min;   if(range <= 0)      throw Invalid_Argument("random_integer: invalid min/max values");   return (min + (random_integer(range.bits() + 1) % range));   }/************************************************** Generate a random prime                        **************************************************/BigInt random_prime(u32bit bits, const BigInt& coprime)   {   if(bits <= 16)      throw Invalid_Argument("random_prime: Can't make a prime of " +                             to_string(bits) + " bits");   if(coprime <= 0)      throw Invalid_Argument("random_prime: comprime must be > 0");   while(true)      {      BigInt p(Random, bits);      p.set_bit(bits - 2);      p.set_bit(0);      SecureVector<u32bit> sieve(100);      for(u32bit j = 0; j != sieve.size(); j++)         sieve[j] = p % PRIMES[j];      u32bit counter = 0;      while(true)         {         if(counter == 4096 || p.bits() > bits)            break;         bool passes_sieve = true;         counter++;         p += 2;         for(u32bit j = 0; j != sieve.size(); j++)            {            sieve[j] = (sieve[j] + 2) % PRIMES[j];            if(sieve[j] == 0)               passes_sieve = false;            }         if(!passes_sieve || gcd(p - BigInt::one(), coprime) != BigInt::one())            continue;         if(passes_mr_tests(p))            return p;         }      }   }/************************************************** Generate a random safe prime                   **************************************************/BigInt random_safe_prime(u32bit bits)   {   if(bits <= 16)      throw Invalid_Argument("random_safe_prime: Can't make a prime of " +                             to_string(bits) + " bits");   BigInt p;   do      p = (random_prime(bits - 1) << 1) + BigInt::one();   while(!is_prime(p));   return p;   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -