亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rab.c

?? 應用密碼學這本書的源代碼
?? C
字號:
/*
  Author:  Pate Williams (c) 1997

  Rabin public-key encryption. See "Handbook of
  Applied Cryptography" by Alfred J. Menezes et
  al Section 8.3 pages 292 - 294.
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "lip.h"

#define BITS_PER_CHAR 8l
#define DEBUG

char MAGIC[32] = {1, 0, 1, 0, 1, 0, 1, 0,
                  1, 0, 1, 0, 1, 0, 1, 0,
                  1, 0, 1, 0, 1, 0, 1, 0,
                  1, 0, 1, 0, 1, 0, 1, 0};

int zsquare_root_mod(verylong za, verylong zp, verylong *zr)
{
  int value;
  long i, s = 0;
  verylong zb = 0, zc = 0, zd = 0, zi = 0;
  verylong zq = 0, zs = 0, zt = 0, zx = 0;

  if (zjacobi(za, zp) == - 1) {
    zzero(zr);
    value = 0;
  }
  else {
    do
      do zrandomb(zp, &zb); while (zscompare(zb, 0l) == 0);
    while (zjacobi(zb, zp) != - 1);
    zsadd(zp, - 1l, &zq);
    zcopy(zq, &zs);
    do {
      zrshift(zs, 1l, &zt);
      zcopy(zt, &zs);
      s++;
    } while (!zodd(zt));
    zinvmod(za, zp, &zi);
    zexpmod(zb, zt, zp, &zc);
    zsadd(zt, 1l, &zd);
    zcopy(zd, &zt);
    zrshift(zt, 1l, &zd);
    zexpmod(za, zd, zp, zr);
    for (i = 1; i <= s - 1; i++) {
      zone(&zt);
      zlshift(zt, s - i - 1, &zs);
      zmul(*zr, zi, &zt);
      zmul(*zr, zt, &zx);
      zexpmod(zx, zs, zp, &zd);
      if (zcompare(zq, zd) == 0) {
        zmulmod(*zr, zc, zp, &zt);
        zcopy(zt, zr);
      }
      zmulmod(zc, zc, zp, &zt);
      zcopy(zt, &zc);
    }
    value = 1;
  }
  zfree(&zb);
  zfree(&zc);
  zfree(&zd);
  zfree(&zi);
  zfree(&zq);
  zfree(&zs);
  zfree(&zt);
  zfree(&zx);
  return value;
}

int square_roots(verylong zf, verylong zn,
                 verylong zp, verylong zq,
                 verylong *zx1, verylong *zx2,
                 verylong *zy1, verylong *zy2)
/* computes the four square roots of a modulo n
   where n is composite n = p * q */
{
  int value;
  verylong za = 0, zb = 0, zc = 0, zd = 0, ze = 0;
  verylong zg = 0, zr = 0, zs = 0, zx = 0, zy = 0;

  zsquare_root_mod(zf, zp, &zr);
  zsquare_root_mod(zf, zq, &zs);
  zexteucl(zp, &zc, zq, &zd, &zg);
  if (zscompare(zr, 0l) != 0 && zscompare(zs, 0l) != 0 &&
      zscompare(zg, 1l) == 0) {
    zmul(zr, zd, &za);
    zmul(za, zq, &zb);
    zmul(zs, zc, &za);
    zmul(za, zp, &ze);
    zaddmod(zb, ze, zn, &zx);
    zmul(zr, zd, &za);
    zmul(za, zq, &zb);
    zmul(zs, zc, &za);
    zmul(za, zp, &ze);
    zsubmod(zb, ze, zn, &zy);
    zmod(zx, zn, zx1);
    znegate(&zx);
    zmod(zx, zn, zx2);
    zmod(zy, zn, zy1);
    znegate(&zy);
    zmod(zy, zn, zy2);
    value = 1;
  }
  else value = 0;
  zfree(&za);
  zfree(&zb);
  zfree(&zc);
  zfree(&zd);
  zfree(&ze);
  zfree(&zg);
  zfree(&zr);
  zfree(&zs);
  zfree(&zx);
  zfree(&zy);
  return value;
}

int get_bit(char *buffer, long number)
{
  long bit = number % BITS_PER_CHAR;
  long byte = number / BITS_PER_CHAR;

  return (buffer[byte] >> bit) & 1;
}

void set_bit(char *buffer, int value, long number)
{
  long bit = number % BITS_PER_CHAR;
  long byte = number / BITS_PER_CHAR;
  long mask;

  if (value == 1)
    buffer[byte] |= (char) (1 << bit);
  else {
    mask = 1 << bit;
    buffer[byte] &= (char) ~mask;
  }
}

void bits_to_verylong(char *bits, long number, verylong *za)
{
  long i;
  verylong zb = 0;

  zintoz(bits[0] - '0', za);
  for (i = 1; i < number; i++) {
    zlshift(*za, 1l, &zb);
    zsadd(zb, bits[i] - '0', za);
  }
  zfree(&zb);
}

void verylong_to_bits(char *bits, long *number, verylong za)
{
  long i;
  verylong zb = 0, zc = 0;

  *number = z2log(za);
  zcopy(za, &zb);
  for (i = 0; i < *number; i++) {
    zlowbits(zb, 1l, &zc);
    bits[i] = (char) ((zc[1] & 1) + '0');
    zrshift(zb, 1l, &zc);
    zcopy(zc, &zb);
  }
  bits[*number] = 0;
  strrev(bits);
  zfree(&zb);
  zfree(&zc);
}

long OddRandom(long bit_length)
{
  long i, mask = 1, n;

  bit_length--;
  for (i = 1; i <= bit_length; i++)
    mask |= 1 << i;
  if (bit_length < 16)
    n = (1 << bit_length) | rand();
  else
    n = (1 << bit_length) | (rand() << 16) | rand();
  n &= mask;
  if ((n & 1) == 0) n++;
  return n;
}

void PROVABLE_PRIME(long k, verylong *zn)
{
  double c, r, s;
  int success;
  long B, m, n, p, sqrtn;
  verylong zI = 0, zR = 0, za = 0, zb = 0, zc = 0;
  verylong zd = 0, zk = 0, zl = 0, zq = 0, zu = 0;

  srand(time(NULL));
  zrstarts(time(NULL));
  if (k <= 20) {
    do {
      n = OddRandom(k);
      sqrtn = sqrt(n);
      zpstart2();
      do p = zpnext(); while (n % p != 0 && p < sqrtn);
    } while (p < sqrtn);
    zintoz(n, zn);
  }
  else {
    c = 0.1;
    m = 20;
    B = c * k * k;
    if (k > 2 * m)
      do {
        s = rand() / (double) RAND_MAX;
        r = pow(2.0, s - 1.0);
      } while (k - r * k <= m);
    else
      r = 0.5;
    PROVABLE_PRIME(r * k + 1, &zq);
    zone(&za);
    zlshift(za, k - 1, &zk);
    zcopy(zq, &za);
    zlshift(za, 1l, &zl);
    zdiv(zk, zl, &zI, &za);
    zsadd(zI, 1l, &zl);
    zlshift(zI, 1l, &zu);
    success = 0;
    while (!success) {
      do zrandomb(zu, &zR); while (zcompare(zR, zl) < 0);
      zmul(zR, zq, &za);
      zlshift(za, 1l, &zb);
      zsadd(zb, 1l, zn);
      zcopy(zR, &za);
      zlshift(za, 1l, &zR);
      zpstart2();
      p = zpnext();
      while (zsmod(*zn, p) != 0 && p < B) p = zpnext();
      if (p >= B) {
        zcopy(*zn, &zc);
        zsadd(zc, - 2l, &zb);
        do
          zrandomb(*zn, &za);
        while (zscompare(za, 2l) < 0 || zcompare(za, zb) > 0);
        zsadd(*zn, - 1l, &zc);
        zexpmod(za, zc, *zn, &zb);
        if (zscompare(zb, 1l) == 0) {
          zexpmod(za, zR, *zn, &zb);
          zcopy(zb, &zd);
          zsadd(zd, - 1l, &zb);
          zgcd(zb, *zn, &zd);
          success = zscompare(zd, 1l) == 0;
        }
      }
    }
  }
  zfree(&zI);
  zfree(&zR);
  zfree(&za);
  zfree(&zb);
  zfree(&zc);
  zfree(&zd);
  zfree(&zk);
  zfree(&zl);
  zfree(&zq);
  zfree(&zu);
}

void Rabin_gen_keys(long length, verylong *zn,
                    verylong *zp, verylong *zq)
{
  PROVABLE_PRIME(length, zp);
  PROVABLE_PRIME(length, zq);
  zmul(*zp, *zq, zn);
}

void Rabin_encryption(char *inp, char *out,
                      long inp_len, long *left,
                      long *out_len, verylong zn)
/* inp_len is the length of the input buffer in bytes
   out_len is the length of the output buffer in bits */
{
  long out_bit_length = z2log(zn);
  long inp_bit_length = out_bit_length - 1l;
  long b = inp_len << 3;
  long blocks = b / (inp_bit_length - 32l);
  long inp_i = 0, out_i = 0, j, k, l;
  char *bits = calloc(out_bit_length + 1, sizeof(char));
  verylong za = 0, zc = 0, zm = 0;

  *left = b % (inp_bit_length - 32l);
  for (j = 0; j < blocks; j++) {
    for (k = 0; k < 32l; k++)
      bits[k] = (char) (MAGIC[k] + '0');
    for (k = 32l; k < inp_bit_length; k++)
      bits[k] = (char) (get_bit(inp, inp_i++) + '0');
    bits_to_verylong(bits, inp_bit_length, &zm);
    zmulmod(zm, zm, zn, &zc);
    verylong_to_bits(bits, &l, zc);
    for (k = 0; k < out_bit_length - l; k++)
      set_bit(out, 0, out_i++);
    for (k = 0; k < l; k++)
      set_bit(out, bits[k] - '0', out_i++);
  }
  if (*left > 0) {
    for (j = 0; j < 32l; j++)
      bits[j] = (char) (MAGIC[j] + '0');
    for (j = 0; j < *left; j++)
      bits[32l + j] =(char) (get_bit(inp, inp_i++) + '0');
    bits_to_verylong(bits, *left + 32l, &zm);
    zmulmod(zm, zm, zn, &zc);
    verylong_to_bits(bits, &l, zc);
    for (k = 0; k < out_bit_length - l; k++)
      set_bit(out, 0, out_i++);
    for (k = 0; k < l; k++)
      set_bit(out, bits[k] - '0', out_i++);
  }
  *out_len = out_i;
  free(bits);
  zfree(&za);
  zfree(&zc);
  zfree(&zm);
}

void Rabin_decryption(char *inp, char *out, long inp_len,
                      long left, long *out_len,
                      verylong zn, verylong zp,
                      verylong zq)
/* inp_len is the length of the input buffer in bits
   out_len is the length of the output buffer in bytes */
{
  int equal, found;
  long inp_bit_length = z2log(zn);
  long out_bit_length = inp_bit_length - 33l;
  long blocks = inp_len / inp_bit_length;
  long inp_i = 0, out_i = 0, j, k, kmax, l, m;
  char *bits = calloc(inp_bit_length + 1, sizeof(char));
  verylong za = 0, zb = 0, zc = 0, zm[4];

  zm[0] = zm[1] = zm[2] = zm[3] = 0;
  for (j = 0; j < blocks; j++) {
    for (k = 0; k < inp_bit_length; k++)
      bits[k] = (char) (get_bit(inp, inp_i++) + '0');
    bits_to_verylong(bits, inp_bit_length, &zc);
    square_roots(zc, zn, zp, zq, &zm[0], &zm[1], &zm[2], &zm[3]);
    found = 0;
    for (k = 0; k < 4 && !found; k++) {
      verylong_to_bits(bits, &l, zm[k]);
      equal = 1;
      for (m = 0; m < 32l && equal; m++)
        equal = (bits[m] - '0') == MAGIC[m];
      found = equal;
    }
    if (!found) {
      printf("*error*\nmagic not found!\n");
      exit(1);
    }
    if (j == (blocks - 1) && left != 0) kmax = left;
    else kmax = out_bit_length;
    for (k = 0; k < kmax - l; k++)
      set_bit(out, 0, out_i++);
    for (k = 32l; k < l; k++)
      set_bit(out, bits[k] - '0', out_i++);
  }
  *out_len = out_i >> 3;
  free(bits);
  zfree(&za);
  zfree(&zb);
  zfree(&zc);
  for (j = 0; j < 4; j++) zfree(&zm[j]);
}

int main(void)
{
  char alphabet[32] = "abcdefghijklmnopqrstuvwxyz";
  char inp[1024] = {0}, out[1024]= {0};
  long i, inp_len = 260, left, out_len;
  verylong zn = 0, zp = 0, zq = 0;

  for (i = 0; i < 10l; i++)
    strcpy(inp + 26l * i, alphabet);
  Rabin_gen_keys(97l, &zn, &zp, &zq);
  Rabin_encryption(inp, out, inp_len, &left, &out_len, zn);
  Rabin_decryption(out, inp, out_len, left, &inp_len, zn, zp, zq);
  inp[inp_len] = 0;
  printf("%s\n", inp);
  zfree(&zn);
  zfree(&zp);
  zfree(&zq);
  return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利在线观看| 91在线观看一区二区| 日韩欧美一区二区在线视频| 水蜜桃久久夜色精品一区的特点 | 一区二区三区毛片| 一本到不卡精品视频在线观看 | 欧美日韩在线综合| 日韩精彩视频在线观看| 精品福利视频一区二区三区| 国产成人午夜精品影院观看视频| 国产欧美日韩在线看| 91女神在线视频| av不卡免费在线观看| 国产精品视频一二三区 | 在线免费观看日本一区| 亚洲成人在线免费| 久久综合视频网| 99re热这里只有精品视频| 亚洲aⅴ怡春院| 久久久美女艺术照精彩视频福利播放| 波多野结衣一区二区三区| 亚洲国产视频一区二区| 2023国产精品视频| 日本高清不卡视频| 狠狠色狠狠色综合系列| 亚洲男人电影天堂| 日韩精品一区二区三区在线观看 | 久久精品久久综合| 中文字幕制服丝袜一区二区三区| 欧美亚洲一区二区在线| 国产精品一区久久久久| 亚洲小说欧美激情另类| 欧美经典三级视频一区二区三区| 欧美视频精品在线观看| 懂色av一区二区三区蜜臀| 三级在线观看一区二区| 国产精品高潮久久久久无| 日韩三级视频在线看| 色综合久久久久综合99| 紧缚奴在线一区二区三区| 一级日本不卡的影视| 国产三级一区二区| 制服视频三区第一页精品| 91婷婷韩国欧美一区二区| 麻豆精品视频在线观看| 一区二区不卡在线播放| 国产精品人妖ts系列视频| 精品国产一区二区三区忘忧草| 91国模大尺度私拍在线视频 | 成人h动漫精品一区二| 久久国产精品一区二区| 亚洲资源在线观看| 国产精品久久久久久久久图文区| 日韩精品一区二区三区视频| 欧美日韩久久一区二区| 95精品视频在线| 国产91精品一区二区麻豆亚洲| 免费的成人av| 亚洲1区2区3区视频| 一区二区三区欧美日| 亚洲欧美日韩国产另类专区| 国产精品麻豆欧美日韩ww| 久久久久国产精品人| 日韩区在线观看| 欧美一级理论片| 欧美二区三区91| 欧美精品777| 欧美日韩国产另类不卡| 欧美色手机在线观看| 91福利国产成人精品照片| 91在线免费看| 色综合久久久久久久久久久| 99vv1com这只有精品| 成人激情黄色小说| av不卡免费电影| 色婷婷亚洲综合| 欧美性大战久久久久久久 | 欧美精品久久99| 在线观看亚洲成人| 欧美色精品在线视频| 色999日韩国产欧美一区二区| 日本韩国一区二区三区视频| 91福利在线看| 欧美丰满高潮xxxx喷水动漫| 欧美一区2区视频在线观看| 在线播放中文一区| 欧美一级片在线看| 欧美tickling网站挠脚心| 精品欧美一区二区久久| 久久综合色之久久综合| 国产精品三级视频| 亚洲精品日产精品乱码不卡| 一区2区3区在线看| 男男视频亚洲欧美| 国产成人亚洲综合a∨婷婷图片| 成人福利视频网站| 色成年激情久久综合| 欧美人牲a欧美精品| 精品av久久707| 亚洲视频在线一区观看| 亚洲国产综合色| 韩国一区二区三区| 99久久综合精品| 欧美日本一区二区在线观看| 日韩视频一区二区三区 | 91免费观看视频| 91麻豆精品国产91久久久| 久久综合国产精品| 亚洲欧美日韩国产另类专区| 日本怡春院一区二区| 成人免费观看视频| 91麻豆精品国产自产在线| 国产三级久久久| 亚洲女人****多毛耸耸8| 蜜臀av一区二区在线观看| 成人免费毛片片v| 欧美日韩国产电影| 欧美激情综合五月色丁香小说| 一区二区三区不卡视频在线观看 | 亚洲成a人在线观看| 国产在线播放一区| 欧美在线观看视频一区二区三区| 精品美女一区二区| 一区二区高清免费观看影视大全| 国产麻豆一精品一av一免费| 欧美日韩国产免费一区二区| 国产欧美精品区一区二区三区| 亚洲国产乱码最新视频| 大胆亚洲人体视频| 日韩视频在线你懂得| 一区二区三区精品| 成人三级伦理片| 日韩免费看网站| 夜夜嗨av一区二区三区四季av| 国产九九视频一区二区三区| 欧美日韩国产综合一区二区| 国产精品第13页| 国内偷窥港台综合视频在线播放| 欧美午夜片在线看| 国产精品第五页| 国产成人av电影在线| 欧美成人欧美edvon| 夜夜嗨av一区二区三区| aaa国产一区| 久久精品一级爱片| 老司机精品视频导航| 欧美精品日韩一本| 香蕉乱码成人久久天堂爱免费| 99国产精品久久久久| 国产欧美日产一区| 国产一区二区三区最好精华液| 91麻豆精品国产| 亚瑟在线精品视频| 欧美日韩精品福利| 午夜精品一区二区三区三上悠亚 | 日本不卡一区二区三区高清视频| 欧洲一区二区三区在线| 亚洲日穴在线视频| yourporn久久国产精品| 国产精品久久午夜| 成人福利视频在线看| 中文字幕日本乱码精品影院| 不卡视频在线看| 亚洲欧美在线视频| 91首页免费视频| 亚洲黄色片在线观看| 在线精品视频小说1| 一区二区久久久| 欧美日韩日日骚| 日本中文字幕一区| 精品免费日韩av| 国产真实精品久久二三区| 久久夜色精品国产噜噜av| 国产精品伊人色| 国产欧美一区二区精品久导航| 国产一区二区女| 国产精品天美传媒沈樵| av不卡免费电影| 亚洲综合图片区| 欧美一区二区国产| 狠狠狠色丁香婷婷综合久久五月| 国产网站一区二区| 97se亚洲国产综合自在线| 一区二区三区在线播放| 在线播放91灌醉迷j高跟美女| 日本不卡的三区四区五区| 久久免费电影网| 99久久综合99久久综合网站| 夜夜揉揉日日人人青青一国产精品 | 91精品办公室少妇高潮对白| 亚洲成av人片在线观看| 欧美电影精品一区二区| 国产不卡视频在线观看| 亚洲精品国产视频| 欧美一区二区网站| 国产成人福利片| 一级日本不卡的影视| 精品理论电影在线| 成人晚上爱看视频| 日韩 欧美一区二区三区|