今天在看RSA加密算法的时候看到了可以用扩充的euclid算法来简化d的计算。一查才发现原来euclid算法算法就是下面这个式子:
GCED (a, b) = GCED (b, a % b)
下面这个是著名求最大公约数的辗转相除算法的代码实现:
int Euclid_Algorithm (int m, int n)
{
int temp = m;
if (!m || !n) return 0;
if (m < n) {m = n; n = temp;}
while (1) {
if (!(m = m % n)) return n;
if (!(n = n % m)) return m;
}
}
而扩展的euclid算法的原理是这样的:
k*k-1=1(mod 26)
k-1叫k的模逆, 可以用扩展的Euclid算法求出来。
ax = 1 (mod 26) 其中x = a-1
相当于 ax + by = 1,b = 26,求满足条件的一组x, y。当然我们只要x就好.
现在考虑一般的 ax + by = 1 如何求解。
因为满足条件的x, y存在的条件是GC&D(a, b) = 1.
然后有 ax + by = GC&D (a, b)
而同时有 bx' + (a % b)y' = GCED (b, a % b)
由Euclid定理GCED (a, b) = GCED (b, a % b)
所以, 有ax + by = bx' + (a % b)y'= bx' + (a - [a/b]*b)y'= bx' + ay' - [a/b]*b y'= ay' + b(x' - [a/b]y')
对应, 得x = y',y = x' - [a/b]y'。[a/b]是a/b再取整。
特别的, 在b = 0的时候, GCED (a, b) = a = a * 1 + b * 0
即 x = 1, y = 0
分享到:
相关推荐
### 密码学扩展的EUCLID算法求逆元 #### 概述 在密码学领域,特别是公钥加密和数字签名技术中,扩展欧几里得算法(Extended Euclidean Algorithm)是求解模逆元问题的一个重要工具。模逆元的概念在RSA加密算法、...
【欧几里得算法及其应用】 欧几里得算法,又称辗转相除法,是古希腊数学家欧几里得提出的一种求解两个正整数最大公约数(Greatest Common Divisor, GCD)的有效方法。这个算法基于一个非常简单的原理:两个正整数a...
欧几里得算法的原理在于,GCD(a,b)=GCD(b,r),故称辗转相除。 此cpp可解决: 对任意整数a、b求最大公约数,寻找整数s、t使得a*s+b*t=GCD(a,b)。
在密码学领域,欧几里得(Euclid)算法、扩展欧几里得(Extended Euclidean)算法以及素性检验是基础且至关重要的数学工具。本文将深入探讨这些概念,并结合C#编程语言来理解它们在实际应用中的实现。 首先,...
扩展欧几里得算法(Extended Euclidean Algorithm,简称 EUCLID)是求解最大公约数(Greatest Common Divisor, GCD)的经典算法,并且在计算模逆元时有着重要作用。模逆元是指在模m意义下,一个整数a的逆元素b,满足...
//by史瑞 #include #include #define bool int #define true 1 #define false 0 #define M 2//判断多少个数互素 static long int Number[M]={170,201}; bool JudgePrime(long int Ina,long int Inb){ ...
在MATLAB环境中,计算两个整数的最大公约数(Greatest Common Divisor,GCD)是一项常见的任务,尤其在处理数学问题、编码理论或算法实现时。欧几里得算法(Euclidean Algorithm)是求解GCD的经典方法,因其高效性和...
在数学和计算机科学中,扩展欧几里得算法是一种用于计算最大公约数(GCD)的有效方法,同时还可以找到两个整数的线性同余方程的解。在这个场景下,我们关注的是如何使用扩展欧几里得算法来求解多项式的乘法逆元,...
欧几里得算法处理器该设计使用Euclid算法计算整数的最大公约数。 开发了一个ASM-D图表,以使用Verilog HDL在RTL上实现该算法。 该设计经过仿真以实现所需的操作,并在Nexys-4 DDR板上实现。 整数是使用开关输入到...
Hint 提供了证明的思路:对于任何形如 0的一对数字,Euclid 算法在第一次叠代时交换 m 和 n,即 gcd(m,n)=gcd(n,m) 并且这种交换处理只发生一次。 1.3 农夫过河问题:P—农夫、W—狼、G—山羊、C—白菜。 这道题...
在处理所有 1≤m,n≤10 的输入时,Euclid 算法最少要做 1 次除法,最大要做 5 次除法。 3. 二进制转换算法:将十进制整数转换为二进制整数的标准算法可以描述为:用 n 除以 2,余数赋给 Ki(i=0,1,2...),商赋给 n;...
最后,利用Euclid算法计算解密密钥d,满足e*d=1(mod(p-1)*(q-1))。 二、密钥对的产生 密钥对的产生是RSA加密算法的核心步骤,包括选择两个大素数p和q,计算n=p*q,然后随机选择加密密钥e,要求e和(p-1)*(q-1)互质...
扩展的Euclid算法 同余方程 / 二元一次不定方程 同余方程组 线性方程组 高斯消元法 解mod 2域上的线性方程组 整系数方程组的精确解法 矩阵 行列式的计算 利用矩阵乘法快速计算递推关系 分数 分数树 ...
为了验证Euclid算法和Stein算法在高精度条件下的真实运行效率,以随机生成的多组高精度正整数,并分别按同位、异位、完全随机、斐波那契数列相邻项4种情况对这两种最大公约数算法的平均执行效率进行比较。...
例如,对于输入 1≤m,n≤10,Euclid 算法最少要做 1 次除法,最多要做 5 次除法。 2. 求方程实根:对于方程 ax^2+bx+c=0,可以使用 Quadratic(a,b,c) 算法求解实根。该算法首先检查 a 是否为 0,如果不是,则计算 D...
试试吧!对于很多一直邱乘法逆元函数的人来说是一个非常好的选择
4. 利用 Euclid 算法计算解密密钥 d,满足 e × d = 1 (mod (p - 1) × (q - 1))。 其中,n 和 d 也要互质。数 e 和 n 是公钥,d 是私钥。两个素数 p 和 q 不再需要,应该丢弃,不要让任何人知道。 加密和解密过程...
最后,利用Euclid算法计算解密密钥d,满足e*d=1mod((p-1)*(q-1))。 加密过程:将明文分成等长数据块,块长s,其中2∧s=n,s尽可能的大。对应的密文是:ci=(mi∧e)mod n。 解密过程:mi=(ci∧d)mod n。 2.Java...