RSA和DES加密算法详解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Part 2
DES 算法原理 — — 解 密 过 程
DES的解密过程就是加密的逆过程。
25
RSA算法原理及其编程实现
Part 1
RSA 算法的产生
Adi Shamir
RSA公钥加密算法
Ron Rivest
Leonard Adleman
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止
已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。 RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分
Part 2
DES 算法原理
明文64 bits 密钥64 bits 子密钥48 bits
F函数32 bits
密文64 bits
Part 2
DES 算法原理 — — 初 始 置 换 和 逆 置 换
DES算法中所有的置换表都是给定的
Part 3
DES 编程实现 — — 初 始 置 换 和 逆 置 换
56bits密钥分成左右两边,经过置换、左移、选位得到48bits的子密钥
Part 2
DES 算法原理 — — F 函 数 生 成
左边32bitsE盒置 换得到48bits
异或 得到48bits
Part 3
DES 编程实现 — — E 置 换 表
17
Part 2
DES 算法原理 — — F 函 数 生 成
左边32bitsE盒置 换得到48bits
异或 得到48bits
Part 2
DES 算法原理 — — S 盒 置 换
6 bits * 8组 → S盒 → 4 bits * 8组 48 bits → S盒 → 32 bits
19
Part 3
DES 编程实现 — — S 盒 置 换
Part 2
DES 算法原理 — — F 函 数 生 成
Part 3
RSA 编程实现( C 语言)
void encrypt() { if(flag == 0) { cout<<"setkey first:"<<endl; produce_key(); } cout<<"请输入明文:"; cin>>m; c = modular_multiplication(m,pu.e,pu.n); cout<<"密文 is:"<<c<<endl; cout<<"请输入下一步操作 "; }
容易,但是想要对其乘积进行因式分解却极其困难,因此可以
将乘积公开作为加密密钥。
Part 2
RSA 算法描述
1.随机选择两个秘密的质数p、q 2.计算公开的模数,n=p*q 3.计算秘密的φ(n)=(p-1)*(q-1)
4.选择一个与φ(n)互质的量e
5.求K的乘法逆元素,用扩展欧几里得算法,模为φ(n) 6.明文X的值应在0至n-1之间,计算Xe (mod n)产生密 文Y,完成加密操作 7.计算Yd(mod n)产生明文X,完成解密操作
6.明文X的值应在
0至n-1之间,计算 Xe (mod n)产生密
文Y,完成加密操 作
Part 3
RSA 编程实现( C 语言)
void decrypt() { if(flag == 0) { cout<<"setkey first:"<<endl; produce_key(); } cout<<"请输入密文:"; cin>>c; m = modular_multiplication(c,pr.d,pr.n); cout<<"明文 is:"<<m<<endl; cout<<"请输入下一步操作 ";
Part 3
RSA 编程实现( C 语言)
/* 判定一个数是否为素数 */ bool test_prime(Elemtype m) { bool pd; int i; for(i = 2;i < m;i++) if(m % i ==0) break; if(m == i) pd = 1; else pd = 0; return pd;
异或 得到48bits
经过P置换表得到 32bits,即F函数
Part 3
DES 编程实现 — — P 置 换 表
22
Part 2
DES 算法原理 — — F 函 数 生 成
异或 得到48bits
经过P置换表得到 32bits,即F函数
Part 2
DES 算法原理 — — 十 六 轮 迭 代
右边32bits直接放入下一轮的左 边32bits 左边32bits与F函数异或之后放入 下一轮的右边32bits 迭代16次之后再进行逆置换FP, 得到64bits密文
5.用扩展欧几里得算法求K的乘法逆元素d,模为φ(n)
Elemtype extend_euclid(Elemtype m, Elemtype bin) { order(m,bin); Elemtype a[3],b[3],t[3]; a[0] = 1, a[1] = 0, a[2] = m; b[0] = 0, b[1] = 1, b[2] = bin; if (b[2] == 0) { return a[2] = gcd(m, bin); } if (b[2] ==1) { return b[2] = gcd(m, bin); }
while(true) { r = a % b; a = b; b = r; if (b == 0) { return a; break; }
}
Part 3
RSA 编程实现( C 语言)
while(true) { if (b[2] ==1) { return b[1]; break; } int q = a[2] / b[2]; for(int i=0; i<3; i++) { t[i] = a[i] - q * b[i]; a[i] = b[i]; b[i] = t[i];
1、随机选择两个秘密的质 数p,q (89 ,97) 2.计算公开的模数n=p*q (8633) 3.计算秘密的欧拉函数
φ(n)=(p-1)*(q-1)
(8448)
Part 3
RSA 编程实现( C 语言)
4、选择一个与φ(n)互质的量e
/* 求最大公约数 */ Elemtype gcd(Elemtype a, Elemtype b) order(a,b); int r; if(b == 0) { return a; } else {
7.计算Yd(mod n)产生 明文X,完成解密操作
}
DES算法原理及其编程实现
Part 1
DES 算法简介
wenku.baidu.com
DES = Data Encryption Standard = 数据加密标准
DES是一种典型的块密码,即一种将固定长度的明文通过一系列 复杂的操作变成同样长度的密文的算法
明文长度为64位。同时,DES使用密钥来自定义变换过程,因此
Part 2
DES 算法原理 — — 第 一 轮 迭 代
64bits明文进行IP置换 64bits明文分为左右两部分,分 别为32bits 右边32bits直接放入下一轮的左 边32bits 左边32bits与F函数异或之后放入 下一轮的右边32bits
Part 2
DES 算法原理 — — 子 密 钥 生 成
算法认为只有持有加密所用的密钥的用户才能解密密文。 密钥长度为64位。然而只有其中的56位被实际用于算法,其余8 位可以被用于奇偶校验,并在算法中被丢弃。因此,DES的有效 密钥长度为56位,因为密钥太短,现已被攻破。改为使用三重 DES算法,即3DES。 经过16轮迭代和置换,得到密文长度为64位。