密码学
文章平均质量分 58
代码实现密码算法
我的书包哪里去了
这个作者很懒,什么都没留下…
展开
-
欧几里得算法(求最大公因子)及扩展欧几里得(求乘法逆元)
一、欧几里得算法 欧几里得算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。gcd(a,b)=gcd(b,a mod b)。算法描述:1. 输入:两个非负整数a,b,且a≥b。2. 输出:a,b的最大公因子。 (1)当b≠0时,作 r←a mod b,a←b,b←r。 (2) 返回(a)。代码递归实现:int gcd(int a,int b){ ...原创 2018-04-14 15:27:24 · 1832 阅读 · 0 评论 -
Miller-Rabin概率素数测试法
目前来说,一般产生大素数的方法有两种:一种是概率素数测试法,另一种是确定性素数测试法。现已有许多种概率素数测试法,如Solovay-Strassen测试法、Lehman测试法及Miller_Rabin测试法等。这些算法基本上是以费尔马定理(Fermat Theorem)为基础,即:若N为素数,则对任意的整数a,0<a<N,必定满足a^(N-1) mod N =1 ,或a^((N-1)/...原创 2018-04-07 19:22:34 · 2255 阅读 · 1 评论 -
二元法及M元法求快速幂模
幂模运算m^e (mod N),当m或者e很大时,其计算复杂度将非常高。因此希望有其他更快的计算方法,下面介绍二元法及M元法快速的运算方法。一、二元法描述在幂模运算中,比较常用的一种方法是二元法(也称为平方乘法),就是先将指数e以二进制表示法表示出来,即:e=e0+e1×2+e2×2^2+.....+e(L-1)×2^(L-1)于是运算过程为:m^e(mod N)=(...(m^(e(L-1))^...原创 2020-03-06 21:57:00 · 1139 阅读 · 0 评论 -
C++实现大整数运算包(加、减、乘、除、幂模、GCD、乘法逆)
1.问题描述大整数运算是现代密码学算法实现的基础,重要性不言而喻。大整数我们指的是二进制位512、1024和2048的数,一般的语言不支持。2.基本要求以类库头文件的形式实现。3.实现提示在选择了大整数的存储结构之后,主要实现以下运算:①模加;②模减;③模乘;④模整除;⑤模取余。这五种运算模拟手算实现。⑥幂模:利用“平方-乘法”算法实现。⑦GCD:利用欧几里得算法实现。⑧乘法...原创 2020-03-06 22:19:37 · 7385 阅读 · 1 评论 -
RSA公钥密码体制及C++代码实现
公钥密码体制即公开密钥密码体制,也称非对称密码体制或双密钥密码体制。1978年由美国麻省理工学院的Rivest、Shamir和Adleman共同提出了第一个有效的公钥密码体制——RSA公钥密码体制,目前RSA仍然应用于网络银行、电子贸易等许多电子商务领域。一、RSA公钥密码体制原理1.参数定义与密钥生成(1)用户首先秘密选择两个大素数p,q,然后计算出N=pq。(2)用户计算出p-1和q-1的...原创 2020-03-06 21:56:39 · 13191 阅读 · 3 评论 -
ElGamal公钥密码算法及ElGamal数字签名方案实现
ElGamal公钥密码算法是在密码协议中有着重要应用的一类公钥密码算法,其安全性是基于有限域上离散对数学问题的难解性。它至今仍是一个安全性良好的公钥密码算法。它既可用于加密又可用于数字签名的公钥密码体制。一、ElGamal公钥密码算法描述1.选取一个大素数p,使离散对数问题在有限域GF(p)上是难解的,选取g∈Z是一个本原元。2.随机选取整数x,1≤x≤p-2,计算y=g^x...原创 2020-03-06 21:57:20 · 34741 阅读 · 16 评论 -
仿射密码的攻击
加法密码和乘法密码的结合就构成了仿射密码,仿射密码加密的思路为:首先将明文乘以密钥的一部分,然后再加上密钥的剩余部分。一、仿射密码加密解密算法假设c, m, a , b ∈Z26加密:ek(m) ≡c≡ a⋅m+ b mod 26解密:dk(c) = m= a-1⋅(c-b) mod 26密钥为:k =(a ,b ),且满足限制条件 gcd( a ,26)=1。当a=1时,仿射密码...原创 2020-03-06 21:53:50 · 2387 阅读 · 0 评论 -
MD5的实现
1.问题描述 MD5以512比特一块的方式处理输入的消息文本,每个块又划分为十六个32比特的子块。算法的输出由四个32比特的块组成,将它们级联成一个128比特的Hash值。①首先填充消息使填充后的长度恰好为一个比512的倍数小64的数。填充方法是附一个“1”在消息后面,再补多个“0”。然后,在其后附上64比特的消息长度(填充前)的二进制表示。算法中使用了四个32比特的变量A、B、C、D,先把...转载 2018-04-08 10:59:37 · 981 阅读 · 0 评论