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

  • 相关阅读:
    deeplearning.ai 卷积神经网络 Week 1 卷积神经网络
    deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II
    deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I
    deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch Normalization和程序框架
    deeplearning.ai 改善深层神经网络 week2 优化算法
    deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面
    cs231n spring 2017 lecture8 Deep Learning Networks
    cs231n spring 2017 lecture7 Training Neural Networks II
    cs231n spring 2017 lecture6 Training Neural Networks I
    cs231n spring 2017 Python/Numpy基础
  • 原文地址:https://www.cnblogs.com/smy87/p/7919522.html
Copyright © 2011-2022 走看看