1.RSA算法简单介绍

2.快速指数算法

在RSA中,加、解密过程都是要求某个整数的整数次幂后再取模。大多时候,这两个整数都会比较大,这时候直接按含义来进行计算时得到的中间结果会超出计算机所允许的整数取值范围(例如计算66^77,这还是比较小的)
所以需要一种算法较快地计算 a^k (mod n)
1、将k二进制展开

2、制表

3、乘积

证明

C#代码实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RSA简单实现
{class Program{//快速指数算法//计算number1^number2 (mod number3)static int  hjy_speed(int number1,int number2,int number3){int b = 1;           while(number2>0){int a = number2 % 2;if(a == 1){b = (number1 * b) % number3;}number1 = (number1 * number1) % number3;number2 = number2 / 2;}return b ;}   static void Main(string[] args){Console.Write("请输入要加密的字符串:");string attr = Console.ReadLine();   Console.Write("请输入素数p:");int p = int.Parse ( Console.ReadLine());        Console.Write("请输入素数q:");int q = int.Parse(Console.ReadLine());          Console.Write("请输入e(e满足1<e<&(n)):");int e = int.Parse (Console.ReadLine());int n = q * p;int Eular = (q - 1) * (p - 1);int d;// 已知公钥为(e,n),求私钥int si = 1;while(si*e%Eular!=1){si++;}d = si;//加密过程              Console.Write("加密后的字符串为:");string m = "";for (int i=0;i<attr.Length;i++){int num = Convert.ToInt32(attr[i]);    m = m + Convert.ToChar(hjy_speed(num, e, n));Console.Write( Convert.ToChar(hjy_speed(num, e, n)));}Console.WriteLine();//解密过程Console.Write("解密后的字符串为:");for (int i = 0; i < m.Length; i++){int num1 = Convert.ToInt32(m[i]);Console.Write(Convert.ToChar(hjy_speed(num1, d, n)));}Console.WriteLine();         Console.ReadKey();}}
}

参考博文

快速指数算法 (RSA的简单实现)相关推荐

  1. RSA密码的手动算法+快速幂算法

    公钥加密方案(非对称加密算法) 1.为什么要引入公钥加密方案? 密码学中的加密方案分成对称密钥和非对称密钥(也就是我们说的公钥加密,代表加密算法是RSA加密算法). 而对称加密方法有一个特点,任何通信 ...

  2. 一个简单的MATLAB脚本——快速行进算法(FMM))

    一个简单的MATLAB脚本--快速行进算法(FMM) 介绍快速行进算法(FMM)的简单MATLAB脚本,不到20行代码实现快速行进算法的运算结果,而且计算速度非常快.给了两个实例模型来说明计算结果. ...

  3. Vue中的Diff算法 patch函数-简单Diff算法-双端Diff算法-快速Diff算法-当数据发生改变,视图如何更新?

    文章目录 Vue中的Diff算法 概述 前置知识 patch方法 简单Diff算法 总结 双端Diff算法 --vue2 快速Diff算法 --vue3 vue2和vue3 Diff算法的区别 当数据 ...

  4. RSA加密算法简单分析

    预备知识 1)RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名.RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命 ...

  5. LeetCode50——一题学会快速幂算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode的第31篇文章,我们来看下LeetCode的第50题,求一个数的幂. 题意 这道题的题意只有一句话,就是给定两个数x和 ...

  6. 【DSP数字信号处理学习笔记】—— 详细推导DFT的快速实现算法:FFT 基于库利-图基算法的实现

    引言:尽管离散傅里叶变换(DFT)让频谱分析技术在计算机上的实现成为可能,但是受限于DFT算法庞大的计算量 O(N2)O(N^2)O(N2),使得DFT在一开始并没有被广泛使用,直到快速傅里叶变换算法 ...

  7. 快速幂算法c语言求a的n次方,快速幂算法(数学)

    什么是快速幂算法? 快速幂算法能帮我们算出指数非常大的幂,传统的求幂算法之所以时间复杂度非常高(为O(指数n)),就是因为当指数n非常大的时候,需要执行的循环操作次数也非常大.所以我们快速幂算法的核心 ...

  8. 算法笔记(3)—— 快速 I/O 算法:快速输入算法、快速输出算法

    I/O(英语:Input/Output),即输入/输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出,在算法竞赛里面一般指的就是控制台(那个黑窗口)里面的输入与输出,平时我们或许并 ...

  9. RSA加密算法简单介绍以及python实现

    RSA加密算法简单介绍 注:本篇文章只是本人在学完RSA加密之后的个人总结,若有不正确的地方,欢迎指正OVO RSA是一种公钥加密算法,它具有公钥和私钥两种密钥:公钥用来加密,并且是公开的,私钥是用来 ...

最新文章

  1. vs2015下载 简体中文版/企业版 附邀请码
  2. 龙格库塔法解微分方程组的matlab程序,MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc...
  3. IBM copy service--flashcopy 实验
  4. 牛人推荐的跨浏览器兼容性总结
  5. 吴恩达机器学习笔记二之多变量线性回归
  6. QT Creator 使用 design 修改 ui界面编译后界面未更新代码提示
  7. 超过4G的分区安装oracle,Red hat Linux AS4.0安装Oracle9.2.04详细步骤
  8. 外服封号_王者荣耀外服玩家被封号十年吐槽无辜,官方复审后,玩家表示轻了...
  9. java内存管理机制-转载保存有价值的东西
  10. 常用数据库连接方式url
  11. 说ViewHolder
  12. 数据仓库建设之总线矩阵/总线架构
  13. 【Jectpack】DataStore
  14. 【详细图解】七彩虹智能主板的开机键连接线怎么插 | 七彩虹主板的前置音频接线法怎么插 | 七彩虹2.0主板 F_PANEL怎样插
  15. KrakenD网关V1.0.0文档初步翻译
  16. 使用Sbert预训练的TTS模型《Expressive Text-to-Speech using Style Tag》
  17. 后台管理系统日志(一个小插曲)
  18. Oulipo(欧力波)(经典kmp模板题) HDU-1686
  19. MicroRNAs在HBV阳性肝细胞癌免疫耐受形成中的功能及机制研究
  20. ffmpeg-hls实现分析

热门文章

  1. Nginx正向代理https请求
  2. Excel对数据区域按不同的字体颜色分类统计个数
  3. SQLAlchemy 1.3文档中文版 - 对象关系指南
  4. Linux系统下如何修改主机名
  5. 记一次keep-alive没有生效的排查
  6. 关于数据库的外模式 内模式 和 模式
  7. 关于亚马逊店铺月租费用的几个问题卖家们都知道吗?
  8. JavaScript刷新当前页面的三种方法,载入新文档替换当前页面
  9. vue使用 APlayer+Meting实现音乐播放,支持多平台音乐:网易云、腾讯、虾米、酷狗、百度
  10. 医院病房E-R图及关系模式