【加密】RSA加密之算法
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加密之算法的更多相关文章
- openssl 非对称加密 RSA 加密解密以及签名验证签名
1. 简介 openssl rsa.h 提供了密码学中公钥加密体系的一些接口, 本文主要讨论利用rsa.h接口开发以下功能 公钥私钥的生成 公钥加密,私钥解密 私钥加密,公钥解密 签名:私钥签名 验 ...
- MD5,Des,RSA加密解密
一.加密和解密 下面先熟悉几个概念 1>对称加密:加密的key和解密的key是同一个 但是如何确保密钥安全地进行传递?秘钥的安全是一个问题 2>非对称加密:加密点的key和解密的key不是 ...
- openssl C语言编码实现rsa加密
非原创, 引用自: 1 CC=gcc CPPFLAGS= -I /home/yyx//openssl-1.0.1t/include/ CFLAGS=-Wall -g LIBPATH = -L /usr ...
- 最通俗易懂的RSA加密解密指导
前言 RSA加密算法是一种非对称加密算法,简单来说,就是加密时使用一个钥匙,解密时使用另一个钥匙. 因为加密的钥匙是公开的,所又称公钥,解密的钥匙是不公开的,所以称为私钥. 密钥 关于RSA加密有很多 ...
- 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输
Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...
- 基于OpenSLL的RSA加密应用(非算法)
基于OpenSLL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...
- 秀尔算法:破解RSA加密的“不灭神话”
RSA加密 VS 秀尔算法 作为RSA加密技术的终结者——“太多运算,无法读取”的秀尔算法(Shor’s algorithm)不是通过暴力破解的方式找到最终密码的,而是利用量子计算的并行性,可以快速分 ...
- 非对称加密RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。使用最广泛的是RSA算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私 ...
- Asp.Net 常用工具类之加密——非对称加密RSA算法
踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...
随机推荐
- C#_数据库交互_SqlHelper
using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; usin ...
- dynamic_cast用法
dynamic_cast < type-id > ( expression ) 该运算符把expression转换成type-id类型的对象.Type-id必须是类的指针.类的引用或者vo ...
- String使用equals方法和==分别比较的是什么?
equals方法和==的区别 首先大家知道,String既可以作为一个对象来使用,又可以作为一个基本类型来使用.这里指的作为一个基本类型来使用只是指使用方法上的,比如String s = &quo ...
- Android 开发中的屏幕适配技术详解
本文主要介绍Android开发中比较头疼繁琐的一个问题-屏幕适配问题.主要从适配原因.基本核心概念.适配方法等方面介详细 介绍从而是的深入或者进一步对Android屏幕适配技术的掌握和理解. 真题园网 ...
- Android(java)学习笔记123:Clock app编写报错01
1.首先我们二话不说直接先看报错内容如下: 07-12 08:25:03.572: E/dalvikvm(3602): native fork pid:0 done. 07-12 08:25:03.5 ...
- windows下回车与换行符
windows下回车与换行符 从键盘输入的数据一般是ASCII码,也就是文本文件,在送到计算机内存时,回车和换行符转换成一个换行符(也就是说回车和换行符在windows文本中是两个字符),再从内存中以 ...
- iOS之pch文件的正确使用
在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch头文件的内容能被项目中的其他所有源文件 ...
- C#导入导出Excel表的数据
一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...
- nyoj 86 找球号(一)
找球号(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0& ...
- PHP自动化测试
参考网址: 1. 基于Jenkins 实现php项目的自动化测试.自动打包和自动部署 2. PHP Jenkins,参考:http://jenkins-php.org/ 3.安装PHP_CodeSn ...