【密码学】C语言实现RSA模幂运算
来源:互联网 发布:淘宝被骗怎么办? 编辑:程序博客网 时间:2024/06/06 11:04
RSA模幂运算
1. 实验内容
按照平方乘算法和模重复平方法,分别计算am mod n
2. RSA介绍
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年7月首次在美国公布,当时他们三人都在麻省理工学院工作实习。RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战和质疑。
RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
3. 模幂运算
模指数运算的快速算法
例如求x16,直接计算的话需做15次乘法。然而如果重复对每个部分结果做平方运算即求x,x2,x4,x8,x16则只需4次乘法。
RSA算法模幂运算
- 求am可如下进行,其中a,m是正整数:
- 将m表示为二进制形式bk bk-1…b0,即
- m=bk2k+bk-12k-1+…+b12+b0
- 因此bk=0 而 bk-i=1或者bk-i=0
am=ab0·(a2)b1·(a4)b2···(a2k-1)bk-1·(a2k)bk
RSA算法模幂运算
- 将m表示为二进制形式bk bk-1…b0,即
- m=bk2k+bk-12k-1+…+b12+b0
- 因此bk=0 而 bk-1=1或者bk-i=0
am=((···(((abk)2·abk-1)2·abk-2)2···ab1)2·ab0)
4. RSA算法
例:求a19
19=1×24+0×23+0×22+1×21+1×20
所以
a19=((((a1)2a0)2a0)2a1)2a1
5. 代码实现
#include <stdio.h>int main(){ int a, m, n, a1, m1, n1, a2, m2, n2; int i, j, cnt, quotient, tmp, s1 = 1, s2 = 1; int mm[20]; printf("请输入数字(a, m, n):"); scanf("%d%d%d", &a, &m, &n); a1 = a2 = a; m1 = m2 = m; n1 = n2 = n; quotient = m1; for (i = 0; quotient != 0; i++) { mm[i] = quotient % 2; quotient = quotient / 2; } j = i; printf("模重复平方根算法:\n"); for (i = 0; i < j; i++) { if (mm[i] == 1) { s1 = (s1 * a1) % n1; } a1 = (a1 * a1) % n1; printf("i = %d, s = %d, a = %d\n", mm[i], s1, a1); } printf("最终结果为:s = %d\n\n\n", s1); for (i = 0; i < j / 2 ; i++) { tmp = mm[i]; mm[i] = mm[j-i-1]; mm[j-i-1] = tmp; } cnt = j; printf("平方乘算法:\n"); for (i = 0; i < j; i++) { s2 = (s2 * s2) % n2; printf("%d, ",s2); if (mm[i] == 1) { s2 = (s2 * a) % n2; } printf("i = %d, b%d = %d, s = %d\n", cnt-1, cnt-1, mm[i], s2); cnt--; } printf("最终结果为:s = %d\n", s2); return 0;}
阅读全文
0 0
- 【密码学】C语言实现RSA模幂运算
- 【密码学】C语言实现AES核心步骤
- RSA与大数运算(C语言)
- RSA算法C语言实现
- RSA算法C语言实现
- 密码学原理_Crypto++实现RSA加密
- RSA算法详解及C语言实现
- RSA算法详解及C语言实现
- RSA算法详解及C语言实现
- RSA加密算法的C语言实现
- RSA加密算法(C语言实现)
- RSA算法详解及C语言实现
- RSA算法详解及C语言实现
- C语言实现的RSA算法程序
- RSA算法详解及C语言实现
- openssl C语言编码实现rsa加密
- C语言简单实现现代密码学rabin签名
- 【密码学】C语言实现SHA-1填充和数据扩充
- 监听器Listener
- 剑指offer之二叉树的下一个节点
- __str__和__repr__比较
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- RecyclerView简单多条目
- 【密码学】C语言实现RSA模幂运算
- PAT 乙级 1030. 完美数列(25)
- AS报错Unable to merge dex
- 2.图层
- java鬼混笔记:lucene 5、index基本的增删查改
- POJ 2763 Housewife Wind 笔记
- *TEST 2 for NOIP 妈的智障
- 联网请求工具类
- TPYBoard MircoPython 外接SPI AD7705