【密码学】C 语言实现 RSA 模幂运算

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值