一, 传统对称加密算法

传统的对称密码算法可以有效地保护小范围内的点对点传输数据的机密性,但是在参与通信的节点数量增多后,密钥管理成为了瓶颈问题。

在密码学中,恺撒密码,或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。

对称加密算法是应用较早的加密算法。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

二,非对称加密算法


对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

三,RSA加密算法

RSA算法是一种非对称密码算法,通常是先生成一对RSA 密钥,其中之一是保密密钥(SK),由用户保存;另一个为公开密钥(PK),可对外公开,甚至可在网络服务器中注册,加密算法和解密算法也是公开的。
为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位,RSA密钥长度随着保密级别提高,且增加很快。但这会使加密的计算量增大,于是为减少计算量,在传送信息时常采用传统加密方法与公开密钥加密方法相结合的方式。

为了具体了解RSA算法,我们先熟悉下列简单的数学概念:

  1. 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
  2. 互质是公约数只有1的两个整数,叫做互质整数。
  3. 模运算,即求余运算,如5%2=1。
  4. 同余式:正整数a,b对p取模,它们的余数相同,记做 或者a ≡ b (mod p)。
  5. 欧拉函数:对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。为了更直观地知晓原理,这里只说明欧拉函数的特殊情况,即如果n可以分解成两个互质的整数之积,即 n = p *q(其中p,q均为质数) ,则φ(n) = φ(p * q) = φ( p)*φ(q)=(p-1)(q-1)

密钥的生成步骤

举例讲解RSA算法的加密,解密过程:

1.小明随机选择两个不相等质数,例如61和53(即p=61,q=53)
2. 小明计算出p* q得值,即n=61*53=3233。
3. 小明计算出φ(3233)=60**52,即φ(n)=3120
4. 小明在1到3120之间,选择一个随机数,假设为17,即公钥e=17
5. 小明算出e对于φ(n)的模反元素d为私钥,d=2753
ps:

6. 至此,公钥为(3233,17),私钥为(3233,2753)

利用公钥,私钥进行密文传递:
1.发送时:

其中m为待发的信息,即将待发送消息m经过公钥和上述表达式转换后得到c,发送c,即发送的密文c=m^e%φ(n)

2.接收时:

把收到的消息c利用私钥转换过来,得到实际消息m,即m=c^e%φ(n)

注意
m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。此外,也可用私钥加密,公钥解密,这在下文会有详细说明

下面根据具体实例模拟下密文的传递过程:
1.假设小明想要发送的密文为m=12
2.随后小明随机选取互质的两数p=3,q=5,则n=15, φ(n)=(3-1)*(5-1)=8
3.在1~8中随机选取一个与8互质的数作为公钥e,假设小明选取了e=3,则(15, 3)为公钥
4.那么根据e *d%8=1,可以算出d=19,则(15,3)为公钥,(15,19)为私钥
5.加密时:
实际发送出去的密文为:12^3%15=3
7. 解密时:
收到密文内容为3后,解密文: 3^19%15=12

四,RSA加密算法安全性分析

这里有的同学就有疑问了,既然n都已经公开了那么求φ(n)不是易如反掌吗,我随手就能说几个, φ(35)=24 ,φ(21)=12…,但是这是在n很小的情况下,倘若n很大呢,你还可以易如反掌地算出吗?
对于RSA加密解密算法而言,(e,n)为公开密钥,那么破解RSA最直接的方法就是分解整数n,得到n=p* q中的p与q的值,之后由 φ(n)=(p-1)(q-1) 计算得到 φ(n),再通过 e*d%φ(n)=1,即可求出私钥d,之后使用(d,n)即可得出加密之前的明文。但是如果密钥的大小过大的话,那么就会产生“大整数分解难题”,从而导致解密失败。

五,公私钥与数字签名

那么我们可以利用公钥和私钥做什么呢?
首先,鲍勃有两把钥匙,一把是公钥,另一把是私钥。鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。

鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

鲍勃将这个签名,附在信件下面,一起发给苏珊。

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

参考资料:
制作过程中有引用或参考下列优质内容,有问题请联系作者

http://www.youdzone.com/signature.html

https://blog.csdn.net/wjiabin/article/details/85228078

RSA加密算法及使用公私钥实现数字签名相关推荐

  1. 加密算法、公钥、私钥、数字签名与CA

    文章目录 一.对称加密算法 二.非对称加密算法 1.RSA算法 1.1.双向加解密的各自用途 1.2.可逆与不可逆 1.3.RSA秘钥长度 三.数字签名(Digital Sign) 1.为什么要签名 ...

  2. rsa java模数_RSA公私钥获取模数和质数

    实际项目中,发现前端在生成公钥对象的时候并不是使用这种方式,而是通过对应的模数跟质数来构造公钥对象的,这样的话,需要进一步将生成的公钥取出对应的模数和质数.openssl.java api都可以将质数 ...

  3. (PKCS1) RSA 公私钥 pem 文件 提取 公私钥 e d 和 模数 n

    参考链接:RSA公钥文件(PEM)解析 参考链接:OPENSSL中RSA私钥文件(PEM格式)解析[一] 参考:使用openssl命令剖析RSA私钥文件格式 RSA PKCS8 与 PKCS1 公私钥 ...

  4. Https中公私钥加密算法和其使用的RSA算法分析

    学习Https原理的过程中,对公钥证书和私钥证书交换的过程.公钥算法.公钥证书.RSA算法进行了的学习.下面主要是对公钥加密和RSA算法的分析.分析过程并没有覆盖https的方方面面,只是自己的一个笔 ...

  5. openssl_sign() 语法+RSA公私钥加密解密,非对称加密算法详解

    其实有时候觉得写博客好烦,就个函数就开篇博客.很小的意见事情而已,知道的人看来多取一举,或者说没什么必要,浪费时间,不知道的人就会很郁闷.技术就是这样的,懂的人觉得真的很简单啊,不知道的人真的好难.. ...

  6. Java中使用OpenSSL生成的RSA公私钥进行数据加解密

    本文出处:http://blog.csdn.net/chaijunkun/article/details/7275632,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...

  7. Java OpenSSL生成的RSA公私钥进行数据加解密详细介绍

    最近用到企业微信向银行卡转账功能,因为需要使用到:标准RSA算法 故在网上了解一下相关的信息 SA是什么:RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdlem ...

  8. java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

  9. RSA公私钥生成、加解密、签名及验签的原理及工具类

    目录 一.RSA简介 二.加密.签名区别 三.公私钥生成 四.RSA工具类 一.RSA简介 非对称加密算法,由一对密钥(公钥-私钥)来进行加密-解密.签名-验签的过程.公钥-私钥的生成与数学相关,算法 ...

最新文章

  1. 三分钟教你快速选择机器视觉传感器
  2. 交叉验证分析每一折(fold of Kfold)验证数据的评估指标并绘制综合ROC曲线
  3. 仅仅是又多了一本设计书吗 《软件框架设计的艺术》序
  4. redis cluster 添加 删除 重分配 节点
  5. Elasticsearch filter和query的不同
  6. java web中jsp常用标签
  7. P1975 [国家集训队]排队(三维偏序)
  8. python isodd奇偶_Python这些位运算的妙用,绝对让你大开眼界
  9. java基础 --- Arrays.asList():返回指定数组支持的固定大小列表
  10. python 百度ocr识别_Python使用百度Ocr识别文字保存CSV
  11. java移动接口发短信_天天都会写接口,但它的用途和好处有多少人能说得清楚?...
  12. windows使用git clone速度慢,改善方法
  13. 【个人项目总结】四则运算生成器
  14. c语言直接退出程序_C/C++编程笔记:C语言错误处理方法!如何更好地处理程序的错误?...
  15. WeakHashMap回收时机结合JVM 虚拟机GC的一些理解
  16. win7提示由于系统注册表文件丢失或损坏,无法开机
  17. 《非洲归来 不必远方》读后感
  18. vs使用中遇到的问题与插件
  19. 第6期:大学生应该选择哪种主流编程语言
  20. 离散数学 06.05 同构及同态

热门文章

  1. java计算机毕业设计婚纱摄影管理源程序+mysql+系统+lw文档+远程调试
  2. vue路由模式以及原理和区别
  3. Win7特别功能:优化篇
  4. DataScience:KNIME工具的简介、安装、使用方法之详细攻略
  5. 中石油大学22春季《毛泽东思想和中国特色社会主义理论体系概论#》第一阶段在线作业
  6. AdobeAfterEffectPlug-in_JSX_AE插件
  7. 价值34万亿的WLAN,如何走好“最后一公里”?
  8. 人工智能与机器学习:两者有何不同?
  9. SOFTMAX回归模型
  10. mysql econnreset_mysql只要一查询 就ECONNRESET 都没法用