从数学到密码学(十三)

摘要:
公钥来自哪里,让OpenSSL自动为我们生成它。为了做到这一点,我们必须拥有OpenSSL工具。作为一种强大的密码安全工具,公钥加密和解密只是OpenSSL的一个典型应用。OpenSSL中的不同子命令区分不同类型的操作。要了解详细用法,请从以下三项中选择一项:购买OpenSSL书籍、谷歌相关文章和查看OpenSSL源代码。

公钥的应用--加解密(一)

仍然以RSA算法为例,分别讨论

让我们再次祭起屠龙宝剑--OpenSSL工具,让它来给我们展示RSA加解密是怎样操作的。

前已知,进行加密操作需要知道接收方的RSA公钥,和需要加密的明文,然后再进行加密运算,最后得到密文。

公钥从哪里来,就让OpenSSL自动给我们生成吧(当然需要你去执行必要的命令),为了做到这一点,手头必须拥有OpenSSL工具。
至于怎么获取,请google之,网上有N多的文章。其中一种办法,就是到www.openssl.org下载源码包并进行编译(Windows下可以利用VC进行编译),可以得到OpenSSL可执行程序。
当然,如果你用的是Linux,则几乎所有运行Linux内核的操作系统都内置了OpenSSL工具,连编译都免去了。

有了工具,就可以干活了(生成公钥)。作为一个功能强大的密码安全工具,公钥加解密只是OpenSSL的一个典型应用。其他一些密码相关操作,比如对称加密解、Hash函数、证书功能等也包含在其中。不同种类的操作在OpenSSL中分门别类地用不同的子命令进行区分。比如生成RSA公钥请用genrsa子命令。要想知道详细的用法,请三选一:买OpenSSL书、Google相关帖子、查看OpenSSL源代码。

这里顺便说明下笔者的风格:只要网上能够直接搜索得到的相关操作及命令,本Blog一般不会详细讲解,基本拿来直接使用,只会提及大概,需要详细了解的读者朋友们请自己google。还申明一下,对于网上流传的一些特别好的文章,如果对本系列文章的整体构成有所帮助,则会详细说明,并同时说明出处。在此先行谢过这些文章的作者:-)

言归正传,生成RSA密钥对,使用openssl genrsa命令,查看RSA密钥对的命令是openssl rsa,使用RSA密钥对进行加解密操作,则运行的是openssl rsautl命令

openssl genrsa -out myrsakey.pem 1024 ---- 生成1024位的RSA公私钥,保存在文件myrsakey.pem中

openssl rsa -in myrsakey.pem -text    ---- 显示保存在文件myrsakey.pem中的RSA密钥对内容
下面是一个例子
Private-Key: (1024 bit)
modulus:
    00:c2:72:6c:87:20:32:a9:df:52:9c:7d:c3:de:10:
    a7:b4:6d:e1:e5:a9:13:d1:da:e7:7d:3e:99:ae:3b:
    13:eb:3c:fb:a6:0e:55:f2:45:3c:26:f2:c0:c4:b1:
    51:6f:e7:2d:e6:23:5d:ae:de:f2:32:11:7e:a9:92:
    61:c6:f8:9d:c8:58:df:ac:1c:43:dd:43:3b:b1:d3:
    2d:03:12:99:72:74:b7:01:4e:5e:e1:97:7d:04:d5:
    bb:2c:00:92:21:34:98:5a:90:63:4f:52:0f:07:8c:
    61:36:7d:db:ed:73:7e:85:8b:aa:b0:0e:0f:42:48:
    b1:58:25:05:de:97:bd:3b:11
publicExponent: 65537 (0x10001)
privateExponent:
    57:78:33:9b:e1:7f:08:ed:7d:f3:09:9c:17:83:f4:
    7c:f4:c5:1e:93:9d:67:d4:8a:37:cb:f6:43:eb:2d:
    7d:af:94:20:51:e8:95:b0:51:6b:cf:dd:a9:5d:7e:
    9d:d1:27:d3:93:eb:2b:a3:fc:dd:4b:03:68:72:81:
    eb:88:a1:28:db:1e:d5:7a:4a:a6:46:e8:25:62:54:
    6a:14:68:1a:b9:0d:30:da:1c:9d:62:f8:56:1e:b5:
    36:f8:e0:1b:a8:77:3e:84:73:d9:51:6a:f9:da:bf:
    f0:15:68:db:cd:bc:31:26:82:63:cf:ac:af:95:85:
    eb:b6:da:a2:ec:e3:2d:71
prime1:
    00:df:7e:1a:8a:44:69:a4:29:4d:32:96:31:37:91:
    0a:f2:a4:52:cb:37:00:6d:76:bb:81:cc:56:f8:fe:
    83:00:9f:f6:ca:bd:fa:e1:bf:88:1d:c2:0e:5f:b9:
    22:c7:ab:b1:4c:dd:38:5b:f4:ba:d6:37:b6:46:b5:
    3c:b6:70:ab:35
prime2:
    00:de:ba:c9:79:55:df:c9:a2:8e:14:17:45:a7:04:
    47:4c:a7:08:4e:6f:10:23:1b:2d:a4:f0:5f:35:d5:
    50:2a:e5:94:cf:8c:f2:ca:2e:cd:43:e6:80:95:32:
    59:cc:10:cd:fc:b0:a2:a7:18:e4:f3:2d:af:0f:89:
    fd:3a:00:2f:ed
exponent1:
    00:de:9d:bd:d1:fc:53:3e:31:e5:b3:7d:e7:88:71:
    f1:75:c0:38:b8:33:11:39:f8:0a:ce:3f:bc:62:49:
    22:34:7d:22:56:d0:e6:15:f7:b2:9d:f1:ae:5f:ab:
    09:f9:da:0b:c1:84:99:9e:ff:27:1c:3a:62:56:0c:
    31:6d:88:cd
exponent2:
    43:bc:74:a7:64:f9:61:1e:01:ad:94:82:47:4f:e2:
    cb:2a:05:39:ad:47:30:16:04:e4:a3:81:a1:22:95:
    75:e6:4a:42:70:b0:29:d2:df:f4:25:76:b7:69:0f:
    ac:22:f4:32:44:19:c3:4d:ab:db:54:ea:67:84:64:
    b1:ad:fa:e5
coefficient:
    00:cd:b2:3f:72:39:fb:e0:b3:54:d6:bf:aa:9b:80:
    72:4a:9f:ca:e8:e1:99:38:b2:d2:4f:b3:b0:62:16:
    d8:52:cc:ae:57:8f:76:32:b2:07:9f:b4:c7:2e:16:
    50:ba:dd:0c:ff:4e:da:ea:70:f4:fe:2c:e4:4a:6e:
    6e:c6:ec:25:39

简短说明一下,modulus就是n,prime1和prime2相当于p和q,publicExponent就是加密指数e(e和n构成公钥),privateExponent是私钥d
但是解密时我们通常不直接使用d,因为d往往位数很长,直接进行指数运算解密比较费时,所以又请出了exponent1、exponent2、coefficient来进行解密操作,总的时间消耗比直接计算要小。
由于这三个参数用于解密,所以作为私钥的另一种代表形式,也必须好好保管

加密命令
openssl rsautl -encrypt -raw -in plaintext -inkey myrsakey.pem -out ciphertext

明文(plaintext文件内容,二进制格式) ---- 有心的同学能看出明文的编码格式和用途吗
00000000h: 00 02 E1 F1 62 B7 67 CB 82 3C 74 D8 6D 26 F4 93
00000010h: E9 06 5E 20 71 40 F0 A9 89 3F 7A 6A FB 9D 45 C7
00000020h: 2D 54 51 DD 30 39 B9 0B 11 DB 3E 97 8D C0 F7 41
00000030h: 35 2F 32 07 21 B3 96 A1 BD 95 C1 36 CB 5A C2 84
00000040h: E0 0E FC 82 31 4C 48 FA E2 F2 AC E2 E9 A1 08 00
00000050h: 03 00 CD 8E D0 C5 CE 5D D7 81 28 38 43 21 09 DF
00000060h: ED 33 1B 5B 78 50 95 7F 27 C1 1F 72 07 3E A0 72
00000070h: E5 8B E7 E1 DD FA 3E 11 7C 5A D8 B4 7C 93 8D BD

密文(ciphertext文件内容,二进制格式)
00000000h: BD FE 58 A6 00 5E AC B0 99 3A A8 80 81 E6 12 74
00000010h: CF EF F9 BF E3 CA 47 34 09 CB E0 31 C9 F9 D2 CE
00000020h: E0 09 09 D6 CA C7 1A 4F BB DA 9A 9F 62 D6 1C B9
00000030h: F4 7C 61 DB 9D 24 99 E8 DE A7 87 F3 06 C3 BE C8
00000040h: 17 C5 0D 02 50 D7 87 33 57 12 99 5E E6 1D F5 43
00000050h: DE C2 97 87 CD 54 B1 EA 0E E0 10 AF A8 2B C9 9A
00000060h: 00 59 75 1A 1C A9 AE 06 E8 6F DF 0B 7B E3 3A A4
00000070h: D6 52 62 FB 4A 38 85 6C B1 94 E1 30 25 ED 2E 8D

知道了加密操作,解密只需要openssl rsautl子命令带-decrypt参数就可以了
读者可以用此命令验证前面加密操作的正确性,或者直接用perl脚本来计算验证

免责声明:文章转载自《从数学到密码学(十三)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇torch.nn.modules.module.py点击按钮,弹出遮罩层,跳转页面播放视频下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

陶哲轩教你学数学

陶哲轩教你学数学 思维导图 防止博客图床图片失效,防止图片源站外链: http://www.processon.com/chart_image/5f39e81b1e085306e15f00fd.png) 思维导图在线编辑链接: https://www.processon.com/view/5f39e81b1e085306e15f00fa 没有Proces...

《学习之道》

《学习之道》 专注思维和发散思维 1,专注模式下的思维活动对数学和科学的学习必不可少。它是利用理性、连贯、分解的途径直接解决问题的一种模式。专注模式与大脑前额叶皮层(位置就在脑门正后方)集中注意力的能力相关。你把注意力集中到某样东西上,然后砰的一声,专注模式就开启了。2,发散模式对学数学和科学也同样必不可少。如果我们在一个问题上挣扎了许久而不得思路,它会...

ruby中rsa加密加签以及md5、hash加密以及des加解密方法整理

#RSA公钥加密,加签;des 不同加密算法的加密解密方法 # encoding:utf-8# author:anionrequire 'openssl'require 'base64'require 'digest' #一 rsa加签 base64编码  def rsa_sign data, key  rkey =OpenSSL::PKey::RSA.n...

现代科技进步促使微积分学继续向前发展

   大家知道,数学软件包(Mathematica)能使我们“看见”数学函数的细微部分的表现,开阔了人们的眼界,发现了“逐点”定义的函数导数的“病态”表现(违反了人们的直觉)。面对这种局面,我们该怎么办呢?          根据文献记载,1690年,数学家罗必达与贝尔努利(l’Hospital/Bernoulli)在微积分教材里面说:“curves co...

向 Git 服务器添加 SSH 公钥

在网上很少找到文章有提到如何将自己的 Git 远程仓库配置成可以通过 SSH 公钥方式认证的,而几乎清一色都是告诉你怎么通过 web 界面向 GitHub 添加 SSH 公钥。LZ 在网上查找了一番,终于找到了办法。 对于不想看 LZ 下面罗嗦了一大堆的园友,LZ 先把结论放在这里,直接拿去用就是了。 把本地用户的 ~/.ssh/id_rsa.pub 的内...

彻底理解RSA算法原理

1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法。在了解RSA算法之前,先熟悉下几个术语 根据密钥的使用方法,可以将密码分为对称密码和公钥密码 对称密码:加密和解密使用同一种密钥的方式 公钥密码:加密和解密使用不同的密码的方式,因此公钥密码通常也称为非对称密码。 2. RSA加密 RSA的加密过程可以使用一个通式...