Schnorr签名算法(初始化和签名)

Schnorr签名算法(验证)

Schnorr签名算法(正确性)

Schnorr签名算法(举例)

Schnorr签名算法(举例)

C语言实例

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int xy[22];
// 判断两个数是否互质
int isHuZhi(int a, int b) {return b == 0 ? a : isHuZhi(b, a % b);
}
int myPow(int a, int b, int m) {int res = 1;a %= m;while (b != 0) {if ((b & 1) == 1)res = (res * a) % m;a = (a * a) % m;b >>= 1;}printf("rea=%d",res); return res;
}
//求q
int candp(int g,int p)
{ for(int i =0;i<p;i++){for(int j=1;j<=g;j++){g=g*g;}if(g%p==1){printf("a=%d\n",i);return i;}}}
// 求 a mod b 的逆元
void exGcd(int a, int b) {if (b == 0) {xy[0] = 1;xy[1] = 0;} else {exGcd(b, a % b);int x = xy[0];xy[0] = xy[1];xy[1] = x - (a / b) * xy[1];}
}
main()
{int p,q,g,x,y,s,k,e,ni,d,m,n,t,h,c,r,r1;printf("请输入大素数 p ");scanf("%d",&p);m=16;h=11;//生成元q=11; g=6;//candp(q,p);printf("g=%d",g);srand(time(NULL)); //随机数种子x=10;//rand()%p-1+2 ;y= myPow(g, x, p); // y是公开密钥printf("y=%d\n",y);k =9;//rand()%p-1+1 ;
//  while (isHuZhi(k, p-1) != 1) {//        k = 11;//rand()%p-1+1 ;
//    }printf("k=%d",k);// r = g^k mod pr = myPow(g, k, p);printf("r=%d\n",r);e=13;s=(x*e+k)%q;printf("(e,s)=(%d,%d)",e,s);exGcd(y,p);ni=xy[0];printf("ni=%d\n",ni);r1=myPow(g, s, p)*myPow(ni, e, p)%p;if(r==r1){printf("有效");}else{printf("无效");}}

Schnorr签名算法(初始化和签名)C语言实现相关推荐

  1. 理解Schnorr签名算法

    在上一章中我们谈到WisdomChain中使用的的聚合签名是使用Schnorr签名的各方生成的对各自密钥的签名聚合,那么今天我们来了解下,Schnorr签名算法的前世今生. Schnorr签名算法最初 ...

  2. 密码学——Schnorr签名算法

    一.基本知识 1.1 概述 Schnorr签名算法最初是由德国密码学家ClausSchnorr于2008年提出的,在密码学中,它是一种数字签名方案,以其简单高效著称,其安全性基于某些离散对数问题的难处 ...

  3. 【区块链与密码学】第8-6讲:基于SM9签名算法的环签名

    [本课堂内容全部选编自PlatON首席密码学家.武汉大学国家网络安全学院教授.博士生导师何德彪教授的<区块链与密码学>授课讲义.教材及互联网,版权归属其原作者所有,如有侵权请立即与我们联系 ...

  4. c语言字符初始化怎么表示,C语言初始化字符串 怎么进行字符串赋值?C语言

    C语言数组字符串初始化问题 C语言中,初始化操作就是在定义变量的时候,对变量进行赋值,即称为变量的初始化.对于字符变量也是一样的. 举例如下: char ch='a'; // 定义一个字符变量,变量名 ...

  5. c语言二维数组初始化_6.2 C语言二维数组

    01二维数组的定义 1.一般形式 类型说明符 数组名[常量表达式][常量表达式] 2.例子 int a[10][6],b[3][4]; 3.用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列关 ...

  6. 变量的初始化与使用C语言程序注释,c - (为什么)使用未初始化的变量未定义行为?...

    C标准为编译器提供了很大的优势来执行优化. 如果您假设一个简单的程序模型,其中未初始化的内存被设置为某个随机位模式,并且所有操作都按照它们的写入顺序执行,那么这些优化的后果可能会令人惊讶. 注意:以下 ...

  7. c++ 使用未初始化的内存_C语言内存分布(内核区、堆栈区等)

    C语言内存分布(内核.变量,堆栈等) 内核区是提供给操作系统使用的.栈区是给局部变量使用的,局部变量是函数内定义的变量,包括函数系数:程序调用时把局部变量存的数据压入栈,程序退出时把局部变量存的数据弹 ...

  8. c++ 结构体初始化_单片机C语言 - 基于结构体的面向对象编程技巧

    单片机C语言 - 基于结构体的面向对象编程技巧 一.面向对象 面向对象是软件开发方法,是相对于面向过程来讲的.通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式 ...

  9. 用标准C语言初始化线性表,C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作...

    1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...

最新文章

  1. vue项目刷新当前页面的三种方法
  2. 【 Vivado 】使用工程模式
  3. java修改数据库表结构_数据库设计(一):设计传统系统表结构(Java开发)
  4. python中的用法_Python中使用@的理解
  5. 操作系统欢乐笔记-01-带你推开操作系统的大门(雾)
  6. 台式机没有显示计算机图标,为什么台式电脑没有喇叭图标
  7. 简单的php代理 Simple PHP Proxy
  8. AndroidX使用
  9. web服务器和应用服务器的区别
  10. 广告行业中静态创意和动态创意区别
  11. 生命密码是几适合学计算机,数字生命密码是什么?
  12. Debian10英语环境安装搜狗输入法
  13. fancyhdr页眉页脚设计史上最全代码
  14. 硅谷科技巨头CEO一年赚多少?这10位高薪代表了解一下
  15. 级联失效matlab,加权无标度网络的级联失效模型
  16. C#数字金额转人民币大写金额的实现
  17. D3 CSV表格文件的读取详解
  18. 文件上传漏洞(寒假)
  19. OneHZ Math of Rapid Calculation
  20. C语言100题练习计划 07——用字符*输出字母C的图案

热门文章

  1. 单细胞算法-聚类-louvain算法
  2. etcd http API
  3. iOS图像处理(4)坐标变化
  4. Eclipse中文语言包安装和设置中文
  5. Java统计代码的执行时间的6种方法
  6. 「西瓜书」阅读笔记——决策树
  7. python培训班价格-少儿编程培训机构哪家好,儿童编程价格多少钱?家长知多少...
  8. 基于python-opencv的HOG特征提取和使用cv2.HOGDescriptor()
  9. vim-3 粘贴命令、替换命令、替换模式和修改命令
  10. varlimo阿米洛机械键盘 win lock锁定