Schnorr签名算法(初始化和签名)C语言实现
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语言实现相关推荐
- 理解Schnorr签名算法
在上一章中我们谈到WisdomChain中使用的的聚合签名是使用Schnorr签名的各方生成的对各自密钥的签名聚合,那么今天我们来了解下,Schnorr签名算法的前世今生. Schnorr签名算法最初 ...
- 密码学——Schnorr签名算法
一.基本知识 1.1 概述 Schnorr签名算法最初是由德国密码学家ClausSchnorr于2008年提出的,在密码学中,它是一种数字签名方案,以其简单高效著称,其安全性基于某些离散对数问题的难处 ...
- 【区块链与密码学】第8-6讲:基于SM9签名算法的环签名
[本课堂内容全部选编自PlatON首席密码学家.武汉大学国家网络安全学院教授.博士生导师何德彪教授的<区块链与密码学>授课讲义.教材及互联网,版权归属其原作者所有,如有侵权请立即与我们联系 ...
- c语言字符初始化怎么表示,C语言初始化字符串 怎么进行字符串赋值?C语言
C语言数组字符串初始化问题 C语言中,初始化操作就是在定义变量的时候,对变量进行赋值,即称为变量的初始化.对于字符变量也是一样的. 举例如下: char ch='a'; // 定义一个字符变量,变量名 ...
- c语言二维数组初始化_6.2 C语言二维数组
01二维数组的定义 1.一般形式 类型说明符 数组名[常量表达式][常量表达式] 2.例子 int a[10][6],b[3][4]; 3.用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列关 ...
- 变量的初始化与使用C语言程序注释,c - (为什么)使用未初始化的变量未定义行为?...
C标准为编译器提供了很大的优势来执行优化. 如果您假设一个简单的程序模型,其中未初始化的内存被设置为某个随机位模式,并且所有操作都按照它们的写入顺序执行,那么这些优化的后果可能会令人惊讶. 注意:以下 ...
- c++ 使用未初始化的内存_C语言内存分布(内核区、堆栈区等)
C语言内存分布(内核.变量,堆栈等) 内核区是提供给操作系统使用的.栈区是给局部变量使用的,局部变量是函数内定义的变量,包括函数系数:程序调用时把局部变量存的数据压入栈,程序退出时把局部变量存的数据弹 ...
- c++ 结构体初始化_单片机C语言 - 基于结构体的面向对象编程技巧
单片机C语言 - 基于结构体的面向对象编程技巧 一.面向对象 面向对象是软件开发方法,是相对于面向过程来讲的.通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式 ...
- 用标准C语言初始化线性表,C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作...
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
最新文章
- vue项目刷新当前页面的三种方法
- 【 Vivado 】使用工程模式
- java修改数据库表结构_数据库设计(一):设计传统系统表结构(Java开发)
- python中的用法_Python中使用@的理解
- 操作系统欢乐笔记-01-带你推开操作系统的大门(雾)
- 台式机没有显示计算机图标,为什么台式电脑没有喇叭图标
- 简单的php代理 Simple PHP Proxy
- AndroidX使用
- web服务器和应用服务器的区别
- 广告行业中静态创意和动态创意区别
- 生命密码是几适合学计算机,数字生命密码是什么?
- Debian10英语环境安装搜狗输入法
- fancyhdr页眉页脚设计史上最全代码
- 硅谷科技巨头CEO一年赚多少?这10位高薪代表了解一下
- 级联失效matlab,加权无标度网络的级联失效模型
- C#数字金额转人民币大写金额的实现
- D3 CSV表格文件的读取详解
- 文件上传漏洞(寒假)
- OneHZ Math of Rapid Calculation
- C语言100题练习计划 07——用字符*输出字母C的图案