RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。

RSA的算法涉及三个参数,n、e1、e2。

RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:

公钥KU

n:两素数p 和q 的乘积(p 和q保密)

e1:与(p-1)*(q-1)互质

f(n)=(p-1)*(q-1)

1<e1<f(n)

私钥KR

n:两素数p 和q 的乘积(p 和q保密)

e2:e1`-1mod f(n)

(e2*e1)mod f(n)=1 或 e2*e1≡1 mod f(n) 即:e2≡e1`-1mod f(n)

≡是数论中表示同余的符号。(e2*e1)mod f(n)=1 mod f(n)=1

加密

A≡Be1 mod n

e1和e2可以互换使用,即:A=Be2 mod n;B=Ae1 mod n;

解密

B≡Ae2 mod n

公钥KU=( n,e1),私钥KR=(n,e2)

加密时,先将明文变换成0至n-1的一个整数B。若明文较长,可先分割成适当的组,然后再进行交换。

设密文为A,则加密过程为:A≡Be1 mod n, 解密过程为:B≡Ae2 mod n。

实例描述:

假设用户A需要将明文“key”通过RSA加密后传递给用户B,过程如下:

1)设计公私密钥(n,e1)(n,e2)

令p=3,q=11,则n=33 ;f(n)=(p-1)*(q-1)=20;取e1=3,(3与20互质),(3*e2)mod 20=1,e2=7

从而我们可以设计出一对公私密钥,加密密钥(公钥)为:KU =( n,e1)=(33,3),解密密钥(私钥)为:KR =(n,e2)=(33,7)。

2)英文数字化。

将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值,即:

则得到分组后的key的明文信息为:11,05,25。

3)明文加密

A1e2 mod n= 117mod 33=11

A2e2 mod n= 317mod 33=05

A3e2 mod n= 167mod 33=25

因此,得到相应的密文信息为:11,31,16。

4)密文解密。

A1e2 mod n= 117mod 33=11

A2e2 mod n= 317mod 33=05

A3e2 mod n= 167mod 33=25

用户B得到明文信息为:11,05,25。根据上面的编码表将其转换为英文,我们又得到了恢复后的原文“key”。

公钥:

<RSAKeyValue>

<Modulus>3eAe9tZz8P91mcmLscZin980wDmhwfI6gJcOm4hrCbZ8MzemFweABxDQdaYh+nKUKX6ln+QFc5FuBVdOdRRuWK48SN3t9wWjtI/4M8CdiqT1iI1JtkFWDmVfh1JPJSNcMPQyHOo79d6XgMacMM6SrsYGiczdVSzAxOx1jIyvQ70=</Modulus>

<Exponent>AQAB</Exponent>

</RSAKeyValue>

私钥:

<RSAKeyValue>

<Modulus>3eAe9tZz8P91mcmLscZin980wDmhwfI6gJcOm4hrCbZ8MzemFweABxDQdaYh+nKUKX6ln+QFc5FuBVdOdRRuWK48SN3t9wWjtI/4M8CdiqT1iI1JtkFWDmVfh1JPJSNcMPQyHOo79d6XgMacMM6SrsYGiczdVSzAxOx1jIyvQ70=</Modulus>

<Exponent>AQAB</Exponent>

<P>9Ih/GtzEYNYyacKejB8nLqfS5NfztgxILpFieJo1WoXRx4ILs1tpQDSGolyaGvN6frnrVZr9+MyoWuAWkyv2+Q==</P>

<Q>6EehIvbtcOr8ch0XKrwoBtDgvdL+To6I1UcgGuHvQBbSak3eaYl4sxGtBx93lF+H0TJLyis1f73T81gQyOjP5Q==</Q>

<DP>YXLH3GegJssVegoh7ss3bSNaKvJYX/MTDOPJLzCdFH8Bs5UCnq5OClUkVi27CASBi2ECBLJoha7hZJ2qwWmi2Q==</DP>

<DQ>fCMz8ezHzw425oG3jOZL+gCN68UkljVE2b8OYG+ZHsZTo+6DzCFlOUZcE690h/5aJqpbqOtYxzFbYfUR213ZJQ==</DQ>

<InverseQ>W4qjq1P+6m59/YVAMmkNBf3zLTYbPnN1RxxJWIQY5H4HCbIG+fRBwgfFkvtAYyJP59d4h827VjbnzDPjWpWeOA==</InverseQ>

<D>O1E81f8VdhvF4/yHFVsVaOpynuWJgmFxFInOBPTesPURlVvOUp/VsY3kPV/R+7QAOmu6edmrP29k+5aQyipRKXLJuL685z1s1RQF7ERNojg3JnEnSw11fX6Ca1lc7eqhU09wk2ZkXlXuIXCk8s0W59OXS/0sjv0v+hAcF957nuE=</D>

</RSAKeyValue>

公钥:

BgIAAACkAABSU0ExAAQAAAEAAQC/A1j2YA9w0ZQe6/0d000kdHqDEXzYDeItfhgteqfiEHfon0pnP3gOoVqQPN1V3e6ZZ0dFOmtcugPPMNoQ5QVILPXQlMwDY/h+9km2MdsZBKKGo9CJgK7Gm6g5sZ/V0IahK4bbc3aYjpFf8w6ji1dQcRIPUFqFgmYfFWmSzpIiwA==

私钥:

BwIAAACkAABSU0EyAAQAAAEAAQC/A1j2YA9w0ZQe6/0d000kdHqDEXzYDeItfhgteqfiEHfon0pnP3gOoVqQPN1V3e6ZZ0dFOmtcugPPMNoQ5QVILPXQlMwDY/h+9km2MdsZBKKGo9CJgK7Gm6g5sZ/V0IahK4bbc3aYjpFf8w6ji1dQcRIPUFqFgmYfFWmSzpIiwCEx1trIQlrR6eHc9ygIZdHmmDu/LWOHH5d+8XhDwuDrPmBl4JWfwP957JNfytqFcUH2fHrlVLrYJYWj/4TK+PbfOIRmp7hoFIo41HcvalT7SVg1Gv3CuWmJt9OxLXZTAPHzYeMD3/lQqqIhIJ+K4jESzkngY7VifIz2nAECnCjHIY5yKnx0zBSPj9AzFDHK1p/3GqgrBmDIGZyVe0EQ3DH+pIWXpHzHpYqw82qm4gK092H2Ti9tcGoHv/G7idqy2dPT21+HCU+Rouj+XcR7qHczBmvvSKdyJbcwm41A1MkvKgXzK72kOzfd+RR9od0jNxJ4s5xZ+i8TExvvy4xvmJH6LPhTRaqzDvI5LsQf7GXUlC2JYFJfjdN1mGo65LkgCW+6b3fD/TMTDqfFZcoa6dgk4nlYGfHsqeNJAuC9RGAngZV5dtKRqyAyr1HnjU4RrLBnkm6bRln1K0OFQWtBwHZQNs8n2FGNlZ1bFQ5S6XqnDLpkbKM53XQ83zt7G7r3Dj83QBiYyfBSnC5jgLK+HEvxegVLiVfwIo89KPy1yQFAp4FdxBqoJB9AXem2PAuZoaoOzmIEj2w5YTKsw6gkB50=

【加密】RSA加密之算法的更多相关文章

  1. openssl 非对称加密 RSA 加密解密以及签名验证签名

    1. 简介 openssl  rsa.h 提供了密码学中公钥加密体系的一些接口, 本文主要讨论利用rsa.h接口开发以下功能 公钥私钥的生成 公钥加密,私钥解密 私钥加密,公钥解密 签名:私钥签名 验 ...

  2. MD5,Des,RSA加密解密

    一.加密和解密 下面先熟悉几个概念 1>对称加密:加密的key和解密的key是同一个 但是如何确保密钥安全地进行传递?秘钥的安全是一个问题 2>非对称加密:加密点的key和解密的key不是 ...

  3. openssl C语言编码实现rsa加密

    非原创, 引用自: 1 CC=gcc CPPFLAGS= -I /home/yyx//openssl-1.0.1t/include/ CFLAGS=-Wall -g LIBPATH = -L /usr ...

  4. 最通俗易懂的RSA加密解密指导

    前言 RSA加密算法是一种非对称加密算法,简单来说,就是加密时使用一个钥匙,解密时使用另一个钥匙. 因为加密的钥匙是公开的,所又称公钥,解密的钥匙是不公开的,所以称为私钥. 密钥 关于RSA加密有很多 ...

  5. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  6. 基于OpenSLL的RSA加密应用(非算法)

    基于OpenSLL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...

  7. 秀尔算法:破解RSA加密的“不灭神话”

    RSA加密 VS 秀尔算法 作为RSA加密技术的终结者——“太多运算,无法读取”的秀尔算法(Shor’s algorithm)不是通过暴力破解的方式找到最终密码的,而是利用量子计算的并行性,可以快速分 ...

  8. 非对称加密RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。使用最广泛的是RSA算法

          非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私 ...

  9. Asp.Net 常用工具类之加密——非对称加密RSA算法

    踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...

随机推荐

  1. Python 将文本转换成html的简单示例

    实例txt文件test_input.txt: Welcome to World Wide Spam. Inc. These are the corporate web pages of *World ...

  2. [Effective C++ --017]以独立语句将newed对象置入智能指针

    这一节也比较简单,先假设我们有如下的函数: int foo(); void memFoo(shared_ptr<T> pw, int foo); 现在假设我们要调用memFoo函数: me ...

  3. Linux 服务器相关的一下链接

    Apache 虚拟主机 VirtualHost 配置 以下是各操作系统的配置方法. Redhat Enterprise Linux Ubuntu Linux Windows Mac OS http:/ ...

  4. spring Transaction Management --官方

    原文链接:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html 12.  ...

  5. 20 Best Drag and Drop jQuery Plugins--reference

    reference from:http://dizyne.net/20-best-drag-drop-jquery-plugins/ jQuery has done a great job repla ...

  6. SQL Abstraction and Object Hydration

    SQL Abstraction and Object Hydration In the last chapter, we introduced database abstraction and a n ...

  7. javascript笔记05:函数表达式和函数语句的区别

    1.首先是函数语句: myfunc(); function myfunc() { //执行一些语句 } 当函数语句被定义的时候,在一个脚本代码被优先考虑,因此,无论该函数是定义之前或者定义之后都可以被 ...

  8. HeaderTemplate

    前台代码: <asp:Repeater ID="rptList" runat="server" onitemdatabound="doSomet ...

  9. Linux系统上安装软件(ftp服务器)

    一:安装ftp服务器 在安装linux系统的时候,自定义软件包安装时,我已经勾选了ftp服务器,所以已经 安装过了,如果没有勾选,需要额外下载ftp的安装包,进行安装. ftp服务器搭建过程中遇到的问 ...

  10. jquery animate() 防止多次执行

    参考:关于jquery 怎样让 animate不多次执行呢 当click方法里面,执行animate时,然后点击的比较频繁,那么animate()的动画也会比较多次滚动. 如: function sc ...