RSA加密算法,从实际应用到基础原理(二)https://blog.csdn.net/mashiqing/article/details/127042988

日常的基础应用,登录远程服务器

在使用ssh登录服务器的时候,每次都需要输入密码,为了解决这个问题,我们一般采取使用ssh-keygen命令在本地生成公钥和私钥两个文件,然后将公钥文件的内容追加到服务器家目录的./ssh文件夹中的authorized_keys文件里的方式来解决。

那么,到底什么是公钥,什么又是私钥,为何这一对"钥匙"可以代替密码来进行验证呢?

首先让我们来看一下在我们输入ssh命令登录服务器的过程中发生了什么:

  1. 客户端使用ssh usrname@hostname命令向服务器发送了一个连接请求;
  2. 在服务器接收到我们的信息后,会在authorized_keys文件里查找是否有对应的用户名信息,如果有的话就随机生产一个字符串,我们记作String_A;
  3. 服务器使用用户名对应的公钥进行加密,然后发送回客户端;
  4. 客户端用自己电脑上保存的和公钥对应的私钥对收到的加密后的信息进行处理,得到一串字符串String_B,然后发回给服务器;
  5. 服务器会对比String_A和String_B,如果相同,就认为客户端是可信的,免除密码进行登录。

可以发现,在整个流程中,实际上就是一套加密和解密的过程,公钥是一种加密方法,私钥是一种解密方法,而且这是一套非对称的加密方法。也就是说,我们的加密方法,也就是公钥是公开的,谁都可以获取,然后用来对要传输的信息进行加密,但是私钥是不公开的,只有创建公私钥的人才有。那为什么我们的加密方法都公开了,也不怕别人通过研究方法倒推出解密方法呢,就让我们来仔细研究一下这一对公私钥和加密算法。

公私钥文件

首先查看我们生成的公钥"id_rsa.pub"文件,内容如下:

ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQC3cPGQnTrUfzBbmfLUAfFrpfeu4s54xFcUTul+aFUiVg2fcVNJBIDaRjUpAJ03ZMJaz1N6bqe52Jg0Bd7FI/H72IZ3mqrSAedGaljV+vj/uVAZqaclJK541lBT4oAW3PO8lgwBd4vYj6PvyIb+9M5/Ro/HgwGqKfh1co/LWeRPGthuj3ZYbSJF0+JFiOuKi6Gdryj0xODGrtEjMVHdu9/YzDTUod9Wx5gOmzwk9Pyy5dc4PQk4rdf7ek8guFMw7LJjevT2HWdwqqQ8E5AjhdbDFo7QH9erI8w93u9bCE3X+fRvER4ykxb0MJ1UPQBPpcL7a7jGWQfyx1cYXSWNzw+n
XXXXXX@XXXXXX

可以看到第一行写明了我们的加密算法->大名鼎鼎的RSA加密算法,后面的是正式的秘钥内容,我们可以用base64 -d命令解码,然后hexdump -C命令标准十六进制和ascii码,结果如下所示:

id_rsa

来逐行解读这段文件:

  • 前4个字节 "00 00 00 07" 说明了接下来的数据块是7个字节长,接下来的7个字节的内容"73 73 68 2d 72 73 61", 每个字节用一个16进制数字表示,查ASCII表,正好对应了字符串 "ssh-rsa";
  • 随后的4个字节"00 00 00 03"说明了接下来的数据块是3个字节长,接下来的3个字节的内容就是"01 00 01",使用int('010001',16)换算成十进制是65537,这个数字我们用e来代表,在之后的原理介绍中会用到;
  • 在接下来的4个字节"00 00 01 01"说明了接下来的数据块是257个字节长,其中,开头的"00"代表这是一个正数,而后面的256个字节,也就是2048比特说明这代表了一个2048位的二进制数字。

私钥文件是私密的,不能随意公开,我们通过openssl命令查看私钥文件"id_rsa"的内容,发现里面有几个模块,分别是:

  • modulus
  • publicExponent
  • privateExponent
  • prime1
  • prime2
  • exponent1
  • exponent2
  • coefficient

通过对比公私钥,我们很容易发现私钥的modulus模块的内容和公钥里的那个2048位的数字是一样的,我们一般记作"N",而publicExponent的值就是"0x10001",和我们上面提到的数值e是一样的,后面的privateExponent,prime1和prime2我们分别用字母d、p和q代表,这就是我们加解密用到的所有信息,另外的exponent1和exponent2以及coefficient都是用来校验的,并不影响整个加解密的过程。
     现在我们有了5个数字:N,e,d,p,q,假设我们要加密的信息是一个小于N的数字m(将信息使用ASCII编码或Unicode编码转化为一串数字,然后切割成短于N的一系列数字),加密后的信息是数字c,那么我们用到的加密和解密算法就分别是:

在这个加密和解密的过程中用到的数学原理和计算方法以及代码,将在后续文章中进行逐步的讲解。

RSA加密算法,从实际应用到基础原理(一)相关推荐

  1. java的rsa加密算法_用java编程实现RSA加密算法

    RSA加密算法是目前应用最广泛的公钥加密算法,特别适用于通过Internet传送的数据,常用于数字签名和密钥交换.那么我今天就给大家介绍一下如何利用Java编程来实现RSA加密算法. 一.RSA加密算 ...

  2. RSA加密算法原理及RES签名算法简介(转载)

    第一部分:RSA算法原理与加密解密 一.RSA加密过程简述 A和B进行加密通信时,B首先要生成一对密钥.一个是公钥,给A,B自己持有私钥.A使用B的公钥加密要加密发送的内容,然后B在通过自己的私钥解密 ...

  3. RSA加密算法破解及原理

    " RSA加密算法是一种非对称加密算法,目前被广泛应用.本文介绍RSA算法的基本原理和破解方法." RSA在互联网上被广泛应用,典型的如各个网站的证书. 很多应用数据的加密也是使用 ...

  4. android支付宝rsa加密算法,支付宝支付流程与RSA算法原理

    RSA加密算法的原理 支付宝的三种支付流程 1.所有的支付逻辑处理,全在服务器完成,现在被淘汰了 原理就是电商App吧所有的信息提交给电商服务器,然后又电商服务器与支付宝服务器进行交互 2.所有的支付 ...

  5. RSA 加密算法原理简述

    概述 本文旨在说明RSA加密算法的原理及实现,而其相关的数学部分的证明则不是本文内容. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Q-WHai 发表日期: ...

  6. RSA加密算法原理及其Java实现

    RSA加密算法原理及其Java实现 RSA加密算法的基本原理 主要步骤 解密过程证明 java实现 简单介绍了RSA加密算法的原理及其Java实现:原文过长时,进行了分段加密. RSA加密算法的基本原 ...

  7. RSA及TLS/SSL及数字证书原理

    转载自:http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html RSA算法原理(二) 作者: 阮一峰 日期: 2013年7 ...

  8. RSA加密算法Python实现

    RSA加密算法Python实现 1.RSA算法简介 2.RSA算法涉及的数学知识 2.1互素 2.2 欧拉定理 2.3求模逆元 2.4 取模运算 2.5 最大公因数 2.6 最小公倍数 2.7 欧几里 ...

  9. 用实例给新手讲解RSA加密算法

    用实例给新手讲解RSA加密算法 2009年06月24日14:04 来源: 我有话说 查看评论(2) 好文我顶(3) 图为 RSA公开密钥算法的发明人,从左到右Ron Rivest, Adi Shami ...

最新文章

  1. 探讨Java I/O类和接口
  2. 用Tableau画幂函数柱状图
  3. mysql 控制台全是_Mysql控制台命令大全
  4. 接口幂等性的设计之————redis分布式锁的应用
  5. maven 和eclipse插件
  6. java basic类似的地方_java – Shiro使用HTTP Basic Auth或匿名访问相同的URI
  7. vs python opencv_VsCode+Anaconda+OpenCV开发环境搭建
  8. 教授直言:有些博导水平一般,名不副实,却不愿放弃招生指标
  9. php 内容编码错误,PHP输出缓冲,ob_gzhandler引起的内容编码错误?
  10. down perm什么意思_没想到“羽绒服”竟叫down coat!为啥有个down?
  11. 各大厂大数据精品分享汇总(进阶版)
  12. SQLSERVER存储过程实例(上)
  13. Image2LaTeX + AxMath:公式自动识别 + word 编辑公式
  14. STM32---IAPISP介绍
  15. mac升级Monterey12.3 AccessClient打不开
  16. 【软件测试】——软件测试经验总结
  17. 数据分析师 2020-8-09笔试题目 有感
  18. 分群思维(六)分群思维的顶层应用-用户画像
  19. 赶紧收藏:如何使用Telegram客户支持
  20. GOJS入门三-如何设置节点间的连线

热门文章

  1. 【PAT甲级题解】1097 Deduplication on a Linked List (25分)
  2. ThreeJS 地球上撒点
  3. 华为 A199 / Ascend G710摄像头拍摄样张 多图 高清无码 慎入
  4. 统计一个英文句子中包含2个a的单词有几个,并将两个a替换为星号,不能用count函数...
  5. 字符串中各类字符数的统计
  6. 全渠道零售中台与数字化转型(2)-从“业务”角度看数字化转型与中台的实施
  7. Android 锁屏时间
  8. CSS——字体(font-family,font-style,font-size注意要点)
  9. 你真的会写测试用例吗?如何写?测试用例之中的细节拉满了...
  10. bzoj3205 [Apio2013]机器人