自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 NTL密码算法开源库拓展——MD5算法

2021SC@SDUSCNTL密码算法开源库拓展——MD5算法算法描述代码实现算法描述MD5算法就像一个函数,任意一个二进制串都可以作为自变量进入这个“函数”,然后会出来一个固定为128位的二进制串。我们先用一个例子来过一下这个过程,然后用文字描述算法细节。比如加密一个普通的内容为hello的ASCII文本文件,这个文件由40个二进制位存储在计算机上:01101000 01100101 01101100 01101100 01101111 [存储]算法开始:进行二进制位补充。具体这样补充:

2021-12-25 13:14:22 418

原创 NTL密码算法开源库拓展——SM2算法

2021SC@SDUSCNTL密码算法开源库拓展——SM2算法概述国密算法SM2加密解密代码实现概述本部分给出了SM2椭圆曲线公钥密码算法涉及的必要数学基础知识与相关密码技术,以帮助实现其它各部分所规定的密码机制。本部分适用于基域为素域和二元扩域的椭圆曲线公钥密码算法。国密算法SM2加密解密代码实现封装加密、解密接口:加密接口: Encrpt_SM2()解密接口:Decrypt_SM2()加密解密结果可以和nodejs的模块sm-crypto互相加密解密#ifdef __cplusp

2021-12-19 23:47:51 412

原创 NTL密码算法开源库——GF2E上多项式(GF2EX)(二)

2021SC@SDUSCGF2E上多项式GF2EX(二)最小多项式特征多项式最小多项式根据哈密顿-凯莱定理,任给数域P上的一个n级矩阵A,总可以找到数域P上一个多项式使如果多项式使我们就称以A为根。以A为根的多项式是很多的,其中次数最低的首项系数为1的以A为根的多项式称为A的最小多项式。讨论如何应用最小多项式来判断一个矩阵能否对角化.引理1:矩阵A的最小多项式是唯一的。引理2:设是矩阵A的最小多项式,那么以A为根的充分必要条件是整除.由此可知,矩阵A的最小多项式是A的特征多项式的一个因式。例

2021-12-07 22:11:37 276

原创 NTL密码算法开源库——GF2E上多项式(GF2EX)(一)

2021SC@SDUSCGF2E上多项式GF2EX(一)多项式mod的运算方法极小多项式多项式mod的运算方法伽罗华域(Galois Field,GF)中关于多项式的mod运算过程,也不知道这样称合适不。这里主要是以构造GF(2^3)域为例,说明mod的运算过程,假设本原多项式为p(x)=x^3+x+1,α定义为 p(x)= 0的根,即 α^3+α+1 = 0,GF(2^3)中的元素可计算如下:计算的方法还是比较简单,但是要知道这个过程,其他项依次类推,不太会用公式编辑器,就不再举例了。再

2021-12-07 22:04:45 448

原创 NTL密码算法开源库——GF2上环/域的扩张(GF2E)

2021SC@SDUSCGF2上环/域的扩张(GF2E)单变元模线性方程广义表描述 m元多项式单变元模线性方程算法单变元模线性方程已知a,b,n,求x,使得ax≡b(mod n)。令d = gcd(a,n),先使用扩展欧几里得求 ax+ny=d 的解。如果 b 不能整除 d 则无解,否则 mod n意义下的解有 d 个,可以通过对某个解不断地加 n/d 得到。复杂度:O(logn)输入:a,b,n 三个整数输出:所有[0,n)中满足 ax≡b(mod n) 的解。代码int gcd(int

2021-12-07 21:12:23 409

原创 NTL密码算法开源库——模二整数上的矩阵(mat_GF2)

2021SC@SDUSC模二整数上的矩阵(mat_GF2)矩阵运算高斯消元矩阵运算具体代码#include <NTL/matrix.h>#include <NTL/vec_vec_GF2.h>typedef Mat<GF2> mat_GF2; // backward compatibilityvoid conv(mat_GF2& X, const vec_vec_GF2& A);mat_GF2 to_mat_GF2(const v

2021-11-21 22:13:38 541

原创 NTL密码算法开源库——大整数上多项式(ZZX,GF2X)

2021SC@SDUSC大整数上多项式(ZZX,GF2X)GF(2)域求两多项式的最大公因式扩展欧几里得求两多项式最大公因式GF(2)域求两多项式的最大公因式//在GF(2)域中求两多项式的最大公因式//注意多项式是降幂排列的还是升幂排列的//b(x) = x^2, a(x) = x^3 + x^2 + 1//降幂排列表示//b = [1 0 0];// a = [1 0 1 1];//升幂排列表示b = [ 0 0 1];a = [1 1 0 1];while(sum(b) &gt

2021-11-16 19:00:49 505

原创 NTL密码算法开源库——模二整数

2021SC@SDUSCNTL密码算法开源库——模二整数综述模二运算综述模2运算是一种二进制算法,不考虑进位和借位,即模2加法是不带进位的二进制加法运算,模2减法是不带借位的二进制减法运算。模二运算模2加法两个序列模二相加,即两个序列中对应位相加,不进位,相同为0,不同为1。1+1=0 0+0=0 1+0=1 0+1=1(相同即为0,否则为1)例如:0 0 1 1──────0 1 1 02 模二减法减法和加法一样,按加法规则运算。0-0=0 1-1=0 0-1=1 1

2021-11-10 14:51:55 374

原创 NTL密码算法开源库-大整数ZZ类(四)

2021SC@SDUSCNTL密码算法开源库-大整数ZZ类(四)RSA算法代码实现RSA算法具体密钥生成步骤见@回首~阑珊私钥解密的证明要证cd ≡ m (mod n)因为,根据加密规则me ≡ c (mod n)于是,c可以写成下面的形式: c = me – kn将c代入要我们要证明的那个解密规则: (me - kn)d ≡ m (mod n)它等同于求证 med ≡ m (mod n)由于ed ≡ 1 (mod φ(n))所以ed = hφ(n)+1将ed代入:mh

2021-10-31 22:59:24 611

原创 NTL密码算法开源库-大整数ZZ类(三)

2021SC@SDUSCNTL密码算法开源库-大整数ZZ类(三)中国剩余定理一次同余式乘法逆元简化剩余的等价描述二次同余式雅可比符号中国剩余定理//中国剩余定理模板代码typedef long long ll;ll china(ll a[],ll b[],int n)//a[]为除数,b[]为余数{ ll M=1,y,x=0; for(int i=0;i<n;++i) //算出它们累乘的结果 M*=a[i]; for(int i=0;i<n;

2021-10-24 15:15:50 318

原创 NTL密码算法开源库-大整数ZZ类(二)

NTL密码算法开源库-大整数ZZ类(二)素数检测Miller-Rabin素数测试素数检测(1)数学基础:费马小定理,二次探测定理,欧拉定理,Miller-Rabin素数测试,同余式,wilson定理,乘法逆元,简化剩余系(具体见@回首~阑珊)Miller-Rabin素数测试Miller和Rabin两个人的工作让Fermat素性测试迈出了革命性的一步,建立了Miller-Rabin素性测试算法。新的测试基于下面的定理:如果p是素数,x是小于p的正整数,且,那么要么x=1,要么x=p-1。这是显然

2021-10-16 19:59:01 410

原创 NTL密码算法开源库-大整数ZZ类(一)

NTL密码算法开源库-大整数ZZ类(一)本章综述代码分析贝祖公式本章综述大整数ZZ类主要实现了任意长度大整数表示、最大公因数、Jacobi符号和素性检验。笔者将通过逐个分析ZZ.cpp源代码中函数的形式来一步步向读者展示NTL是如何实现上述功能的。代码分析(1)判断输入的I/O是否合法:static NTL_CHEAP_THREAD_LOCAL long iodigits = 0;static NTL_CHEAP_THREAD_LOCAL long ioradix = 0; static v

2021-10-05 19:52:36 1474

原创 NTL密码算法开源库(数论库)代码分析项目--综述

NTL密码算法开源库(数论库)代码分析项目--综述项目综述NTL开源代码库的安装和使用NTL代码开源库主要解决的问题项目分工以及核心代码的分配项目综述NTL算法库是开放源码的自由软件,具有专业处理任意精度大整数、实数的计算数论与计算代数的高性能可移植c++库,提供了任意大整数、任意精度实数以及基于整环和有限域上向量、矩阵、多项式的数据结构和算术运算,同时提供了大量的库函数实现,因此它是信息安全理论实现、符号计算与计算机自动推理平台开发的高效函数库。近年来,众多国内外研究人员将其应用于信息安全研究领域。算

2021-09-29 15:38:13 2189

原创 线性表的链式描述代码

线性表的链式描述代码#include <iostream>using namespace std;struct ListNode { int data; struct ListNode* next;};void createList(ListNode* head) { //构造新链表 ListNode* p = head; //为head赋予新指针 int n; cin >> n; p->data = n; //避免首结点值为空 while (1)

2020-11-02 19:11:31 79

原创 冒泡排序,插入排序,基数排序(三种)

冒泡排序,插入排序,基数排序(三种)//C++实现冒泡排序#include <iostream>using namespace std; void print(int* pData, int count){ for (int i = 0; i< count; i++) { cout << pData[i] << " "; } cout << endl;} void BubbleSort(int* pData, int coun

2020-11-01 09:01:34 89

原创 数据结构之栈---括号匹配问题(可厉害了)

数据结构之栈---括号匹配问题问题描述解决思路第一种实现办法第二种解决方法问题描述我们要做的是,对一个字符串的左右括号进行匹配。例如,字符串(a*(b+c)+d)这个字符串的括号就是匹配的,没有多余的左括号或右括号。这是数据结构中的一类很经典的问题。解决思路对于这个问题,思路上要正确。如果从左至右的扫描一个字符串,那么每一个右括号都和都与最近扫描的那个未匹配的左括号相匹配。这种观察结果促使我们在在从左至右的扫描的过程中,将扫描到的左括号都存在栈中,。每当扫描到一个右括号,就将它与栈顶的左括号相匹配

2020-10-03 18:12:00 541

原创 数据结构之数组和矩阵--矩阵&不规则二维数组

数据结构之数组和矩阵--矩阵&不规则二维数组不规则二维数组矩阵定义和操作类matrix操作不规则二维数组不规则二维数组的创建和使用#include<iostream>using namespace std;int main(){ int numberOfRows = 5; int length[5] = {6,3,4,2,7}; int **irregularArray = new int *[numberOfRows]; for(int i = 0;i<nu

2020-10-02 10:16:33 778

原创 数组和矩阵c++代码详解

这里写目录标题概述行主映射和列主映射概述行主映射列主映射三维数组的行主映射不规则二维数组概述在实际应用中,数据通常以表的形式出现。尽管用数组来描述表是最自然的方式,但是为了减少程序运行额时间,经常采用自定义的描述方式。例如。当表中大部分的数据为零的时候,就会用自定义的描述方式。本章首先检查了多维数组的行主描述方式和列主描述方式。这些描述方法把多维数组映射成一维数组。(这其中的内部逻辑是这样的:就是C++编译器在存贮多维数组的时候,内部实际上是通过行主变换,把多维数组转换成一个一维数组进行空间分配。但

2020-09-28 11:04:30 1044

原创 数据结构算法之基数排序(箱子排序的一种扩展)

数据结构算法之基数排序(箱子排序的一种扩展)综述步骤代码展示后记综述关于基数排序是这样的:1.我们类比箱子排序,基数排序就是对一串数字的的个位,十位,百位…进行分别排序,再将最终的排序结果输出,从而完成对整个一串数字的排序。这里基数排序是为了解决箱子排序的一些弊端:就比如数字范围过大,但是一串数字的个数较少。这样我们在初始化箱子的时候会浪费大量的空间和时间。所以我们用基数排序来减少初始化箱子所花费的时间。2.因为每一个位上的数字是从0-9的所以我们对一个位数上的箱子进行初始化的时候,最多只需要初始化

2020-09-27 11:06:02 153

原创 数据结构之创建链表并对其初始化,然后进行箱子排序实例化教程

数据结构之创建链表并对其初始化,然后进行箱子排序实例化教程概述步骤一步骤二步骤三关于循环链表概述本次我们讨论一下如何创建并初始化一个链表,然后对其中的元素进行箱子排序。步骤一第一步,我们进行前期的代码准备。构建一个结构体作为链表的节点。构建一个类,作为使用链表的接口。#include<iostream>using namespace std;template<class T>struct chainNode { T element; chainNode<

2020-09-24 19:06:21 417

原创 创建一个链表并对其初始化

创建一个链表并对其初始化如何创建一个链表并对其初始化如何创建一个链表并对其初始化#include<iostream>using namespace std;template<class T>struct chainNode { T element; chainNode<T>* next; chainNode(){ } chainNode(const T& element) {this->element = element;} ch

2020-09-22 20:08:36 791

原创 箱子排序(线性表-链式描述应用)

箱子排序(线性表-链式描述应用)概述步骤构建studentRecord结构体概述假定用一个线性表来保存一个班级的学生清单。节点数据有:学生姓名,社会保险号码,每次作业和考试分数,所有作业和考试总分的加权总分。假定分数是一个0-100的整数。我们要按总分你排序。我们采用一种更快的排序方法:箱子排序。这种方法首先把分数相同的节点放在同一个箱子里,然后把箱子连接起来得到一个有序的链表。步骤箱子排序需要做的是:1.逐个删除链表中的节点,把删除的节点分配带相应的箱子里2.把每一个箱子中收集的链表并连接起来

2020-09-22 13:25:50 225

原创 数据结构之线性表--链式描述

线性表--链式描述概述单向链表描述结构chainNode类chain构造函数和赋值构造函数析构函数方法get方法indexOf方法erase方法insert输出链表循环链表和头结点双向链表后记概述在线性表的链式描述中,线性表的元素在内存中的位置是随机的。每个元素都有一个明确的指针或链(指针和链是一个意思)指向线性表的下一个元素的位置。单向链表描述在链式描述中,数据对象实例的每一个元素都用一个单元或节点来描述。节点不必是数据成员,因此不是用公式来确定元素的位置。取而代之的是,每一个节都明确包含另一个

2020-09-21 20:29:27 444

原创 数据结构之线性表——数组描述

数据结构之线性表——数组描述数据对象和数据结构数据对象数据结构线性表数据结构抽象数据类型数组描述描述变长一维数组类arrayList数据对象和数据结构数据对象数据对象是一组实例值,例如:boollean={false,true}digit={1,2,3,4,5,6,7,8,9}letter={A,B,C,D,E,F,G,H,I,…,Z}boollean,digit,letter这些都是数据对象,在每个数据对象中,比如在boollean中有true和false两个实例;而0,1,2,…,9是di

2020-09-18 10:28:55 839

原创 折半查找(二分法查找)

折半查找(二分法查找)我们在对一个有序数组中查找元素x,传统的顺序查找的时间复杂度对于有序数组中查找元素x来讲是过于缓慢的和耗时的,所以,我们充分利用有序数组的性质,开发出一种折半查找即二分法查找的程序来加提高查找程序运行的效率。与STL的算法binary_search非常类似,变量left和right分别表示搜索段的左右两个端点。开始的时候,在0~n-1之间进行查找,因此left 和right 的初始值分别为0和n-1。在查找过程中,保持不变的是:x是数组a[0,n-1]中的元素,当且仅当x是a[le

2020-09-17 07:45:13 192

原创 求递归排列的渐进复杂性

求递归排列的渐进复杂性1.先使用递归生成排列对一个数组,将数组中所有的元素的排列全部输出出来。下面展示递归生成排列的代码:下面展示一些 内联代码片。#include<iostream>#include<iterator>using namespace std;template <class T>void permutation(T list[],int k,int m){ if(k==m) { copy(list,list+m+1,ostre

2020-09-14 20:45:55 159

原创 最好、最坏和平均操作计数

最好,最坏和平均操作计数例一:顺序搜索在顺序搜索中,我们对数组按顺序进行搜索我们需要的数,要确定确定数x与数组元素之间的比较次数。我们自然地把n作为实例特征。可是比较次数不是由n唯一确定的。例如,如果n=100,而且x=a[0]那么只需要一次查找。而如果n不在数组中那么需要比较100次。所以最少比较1次,做多比较n次,这是我们查找成功的平均比较次数就是:[1+2+3+4+…+n-1+n]/n=[n+1]/2;例二:在有序数组中插入元素在有序数组中插入一个新元素,插入之后数组依然有序。例如在数组a

2020-09-14 19:20:03 202

原创 数据结构名次计算和排序算法

数据结构的一些算法1.名次计算以及排序1.名次计算以及排序给数组a[n]中的元素进行名次的计算。就比如a[]={2,1,4,7,5},计算完名次之后会出现r[]={2,1,3,5,4},每一个r中元素代表的是其在a数组中对应元素所排的名次。下面给出代码:#include<iostream>using namespace std;template<class T>void rank(T a[],int n,int r[]){ for(int i=0;i<n;i

2020-09-14 16:32:43 1683 1

原创 python编辑器:sublimeText的安装和调试

python编辑器:sublimeTest的安装和环境配置前言安装sublimeTest二级目录前言本次主要介绍Python编辑器sublimeTest的安装和环境配置及调试,包括写出第一个Python程序hello world下面开始介绍安装sublimeTest二级目录...

2020-08-15 08:17:17 469

原创 C++小程序:钟表的C++实现

C++小程序:钟表的C++实现项目要求设计一个小程序,让编译器实时输出显示当前的时间。设计思路要想用C++实现这样的一个程序,第一步获取时间,第二步是设计计时的方法,第三步是输出显示时间我们通过库函数<time.h>获取实时的时间,来初始化定义的时分秒变量;下面我们设计计时方法:让计算机每次执行代码语句前都停顿一秒,这样,就可以达到计时的目的;然后就是在每次的循环中将时间实时的显示出来(计算机每次执行的速度很快,可以忽略每次运行所占的时间导致的误差)代码准备设计时钟类首先我们知道

2020-08-13 20:36:50 4069 2

原创 针对 windows10 进行vscode c/c++环境配置

针对 windows10 进行vscode c/c++环境配置前言装配MINGW下载MINGW配置环境变量下载VS code配置VS code环境前言最近自己的vscode出现了一些问题,我把vscode卸载了之后重新装配了一遍发现自己第一次装配时忽略了很多问题,在这里和大家分享一次完整的装配经历。废话不多说,直接开讲:装配MINGW下载MINGW下载网址:http://www.mingw.org/点击打开mingw官网后,点击右上角的downloads点击右上角的downloads,跳转

2020-08-10 15:57:21 912

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除