zoukankan      html  css  js  c++  java
  • 加密算法中涉及C/C++总结

    学习网站:http://www.runoob.com/cplusplus/cpp-functions.html

    char在VC(c++)中占1字节(byte),8位(bit)。

    int在VC(c++)中占4字节(4byte),32位(32bit)。

     一、相关函数摘要

    1、srand( (unsigned) time( &t ) )

    随机函数srand()函数产生一个以当前时间开始的随机种子

    2、time( &t )

    获取time_t类型的当前时间

    3、 clock()

    这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。

    4、FILE *fopen(const char *filename, const char *mode) ;

    使用给定的模式 mode 打开 filename 所指向的文件

    • filename -- 这是 C 字符串,包含了要打开的文件名称。
    • mode -- 这是 C 字符串,包含了文件访问模式,模式如下:
    模式描述
    "r" 打开一个用于读取的文件。该文件必须存在。
    "w" 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。
    "a" 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。
    "r+" 打开一个用于更新的文件,可读取也可写入。该文件必须存在。
    "w+" 创建一个用于读写的空文件。
    "a+" 打开一个用于读取和追加的文件。

     该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。

    5、size_t fread(void  *ptr ,  size_t  size ,  size_t  nmemb ,  FILE   *stream);

    从给定流 stream 读取数据到 ptr 所指向的数组中

    • ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
    • size -- 这是要读取的每个元素的大小,以字节为单位。
    • nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
    • stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

    成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

    6、char *strcat(char *dest, const char *src)

     src 所指向的字符串追加到 dest 所指向的字符串的结尾

    • dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
    • src -- 指向要追加的字符串,该字符串不会覆盖目标字符串。

    该函数返回一个指向最终的目标字符串 dest 的指针。

    7、 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 

     ptr 所指向的数组中的数据写入到给定流 stream 中;把ptr所指向的nmemb*size个字节输出到stream所指向的文件中。

    • ptr -- 这是指向要被写入的元素数组的指针。
    • size -- 这是要被写入的每个元素的大小,以字节为单位。
    • nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
    • stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。

    返回写到stream文件总的数据项个数。

    8int fclose(FILE *stream)

    关闭stream所指文件,释放文件缓冲区

    • stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流。

    出错返回非0,否则返回0。

    9、int feof(FILE *stream)

    测试给定流 stream 的文件结束标识符;检查文件是否结束。

    • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。

    遇到文件结束符返回非零值,否者返回0。

    二、ECC代码中调用的大数库(tommath)函数总结

    1、mp_int a

    mp_digit是无符号整数;dp是存放大整数的地址;used为实际使用的mp_digit单元;sign=0,表示非负数;=1表示负数。

    2.   mp_init

    初始化mp_int结构,函数返回MP_OKAY,就可以认为该结构已正确初始化,可以安全的被库中其他函数使用

    3. mp_init_set_int

    初始化mp_int结构并设置大常量。它接受一个“长”数据类型作为输入,并且总是将其当作一个32位整数。

    输入一个mp_int类型的和一个“长”整型b,输出a等于b。

    4.mp_init_set

    其中b是一个数据位。

    初始化mp_int结构并设置小常量。例如将mp_int结构设置成一个相对较小的值(1或2等)。

     5. mp_toradix

    函数原型为int mp_toradix(mp_int *a, char *str, int radix)

    此算法计算mp_int类型的a的以r为基的表示法,并把数位存在数组temp(char型)中并以字符串形式输出到屏幕上。

    6. mp_prime_random_ex

    函数原型为int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat);

    *dat一般可设置为NULL。

    求一定位数的素数

    a为返回值,t为回测次数,通常可为10,size指产生的素数的位数

    7.mp_expt_d

    函数原型为int mp_expt_d(mp_int *a, mp_digit b, mp_int *c)

    此算法计算a的b次幂,其中b为单数位数字。

    8. mp_sqr

    函数原型为int mp_sqr(mp_int *a, mp_int *b)

    输入mp_int类型的a,输出b=a^2.分配了一个临时mp_int b来保存平方结果。

    9.mp_sqrt

    函数原型为int mp_sqrt(mp_int *arg, mp_int *ret);

    此算法为开平方根算法。

    10.mp_mul_d

    函数原型为int mp_mul_d(mp_int *a, mp_digit b, mp_int *c)

    单数位乘法。此算法快速计算mp_int与单数位值的乘积。输入mp_int a和mp_digit b,输出c=ab

    11.mp_mul

    函数原型为int mp_mul(mp_int *a, mp_int *b, mp_int *c);

    计算两个数的有符号乘积。返回结果为目标操作数c=ab。

    12.mp_add

    函数原型为int mp_add(mp_int *a, mp_int *b, mp_int *c)

    输入两个mp_int类型的a和b,输出有符号加法c=a+b。

    13.mp_sub

    函数原型为int mp_sub(mp_int *a, mp_int *b, mp_int *c);

    输入两个mp_int类型的a和b,输出有符号加法c=a-b。

    14.mp_mod

    函数原型为int mp_mod(mp_int *a, mp_int *b, mp_int *c)

    输入两个mp_int类型的a和b ,输出c=a mod b, 0 <= c < b

    15.mp_cmp

    函数原型为int mp_cmp(mp_int *a, mp_int *b)

    有符号数的比较。输入两个mp_int类型的a和b,输出有符号数比较结果(a在b的左边)

    函数返回值为MP_GT=1时为大于;MP_EQ=0时为等于;MP_LT=-1时为小于。

    16.mp_clear

    函数原型为void mp_clear(mp_int *a);

    输入:mp_int类型的变量a,输出:回收为a分配的内存。

    17.mp_copy

    函数原型为int mp_copy(mp_int *a, mp_int *b);

    b = a,该算法拷贝了mp_int结构a,算法成功终止时,mp_int结构b就和a代表同一个整数值。mp_int结构b是结构a的完整但不同的拷贝,mp_int结构a可以修改并且不会影响mp_int结构b的值。

    18.mp_init_copy

    函数原型:int mp_init_copy(mp_int *a, mp_int *b);

    初始化mp_int结构a,并将b拷贝到a 。

    19. mp_zero

    函数原型为void mp_zero(mp_int *a);

    输入mp_int 类型的a,并将a的内容清零。

    20.mp_invmod

    函数原型为int mp_invmod(mp_int *a, mp_int *b, mp_int *c);

    c = 1/a (mod b)

    输入mp_int a和b,(a,b)=1,p>=2,0<a<p,输出模逆c=a^-1(mod b)。即ab=1(mod p)

    21.mp_mulmod

    函数原型为int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d);

    此算法求解 d = a * b (mod c)

    22. mp_submod

    函数原型为int mp_submod(mp_int *a, mp_int *b, mp_int *c, mp_int *d);

     此算法求解 d = a - b (mod c)

    转载自:http://blog.csdn.net/wjj1987/article/details/6409469

  • 相关阅读:
    p_value
    p_value
    第一次差异分析
    fdr
    rpkm&map
    rpkm&map
    s
    python数据处理小函数集合
    Jupyter Notebook 的快捷键
    自由度degree of freedom
  • 原文地址:https://www.cnblogs.com/smy87/p/7919522.html
Copyright © 2011-2022 走看看