RSA加密解密算法應(yīng)用及延伸探究
RSA概述
上一篇文章,我們了解了一下Hash算法,那么這篇文章,我們一起來(lái)了解一下RSA.
首先看這個(gè)加密算法的命名.很有意思,它其實(shí)是三個(gè)人的名字.早在1977年由麻省理工學(xué)院的三位數(shù)學(xué)家Rivest、Shamir 和 Adleman一起提出了這個(gè)加密算法,并且用他們?nèi)齻€(gè)人姓氏開頭字母命名.
RSA加密算法是一種非對(duì)稱加密算法,其玩法打破了以往所有加密算法的規(guī)則.在RSA出現(xiàn)之前,所有的加密方法都是同一種模式:加密解密的規(guī)則使用同一種方式.這種長(zhǎng)達(dá)幾個(gè)世紀(jì)的加密方案有一個(gè)致命的缺陷.在傳遞加密信息時(shí),必須讓對(duì)方拿到解密的規(guī)則才能正常解密.由于加密解密的規(guī)則一致,所以保存和傳遞"密鑰",就成了最頭疼的問(wèn)題。
RSA的出現(xiàn)解決了這個(gè)問(wèn)題.我們來(lái)看看RSA是怎么玩的.
RSA加密/解密
- 使用公鑰加密的數(shù)據(jù),利用私鑰進(jìn)行解密
- 使用私鑰加密的數(shù)據(jù),利用公鑰進(jìn)行解密
沒錯(cuò),RSA加密使用了"一對(duì)"密鑰.分別是公鑰和私鑰,這個(gè)公鑰和私鑰其實(shí)就是一組數(shù)字!其二進(jìn)制位長(zhǎng)度可以是1024位或者2048位.長(zhǎng)度越長(zhǎng)其加密強(qiáng)度越大,目前為止公之于眾的能破解的最大長(zhǎng)度為768位密鑰,只要高于768位,相對(duì)就比較安全.所以目前為止,這種加密算法一直被廣泛使用.
RSA的弊端
由于RSA算法的原理都是大數(shù)計(jì)算,使得RSA最快的情況也比對(duì)稱加密算法慢上好幾倍。速度一直是RSA的缺陷,一般來(lái)說(shuō)RSA只用于小數(shù)據(jù)的加密.RSA的速度是對(duì)應(yīng)同樣安全級(jí)別的對(duì)稱加密算法的1/1000左右。
RSA終端命令演示
由于Mac系統(tǒng)內(nèi)置OpenSSL(開源加密庫(kù)),所以我們可以直接在終端上使用命令來(lái)玩RSA.
OpenSSL中RSA算法常用指令主要有三個(gè),其他指令此處不介紹。
命令 | 含義 |
---|---|
genrsa | 生成并輸入一個(gè)RSA私鑰 |
rsautl | 使用RSA密鑰進(jìn)行加密、解密、簽名和驗(yàn)證等運(yùn)算 |
rsa | 處理RSA密鑰的格式轉(zhuǎn)換等問(wèn)題 |
生成RSA私鑰,密鑰長(zhǎng)度為1024bit
hank$ openssl genrsa -out private.pem 1024 Generating RSA private key, 1024 bit long modulus ..++++++ ..........................................++++++ e is 65537 (0x10001)
從私鑰中提取公鑰
hank$ openssl rsa -in private.pem -pubout -out public.pem writing RSA key
我們可以看到生成的私鑰和公鑰文件如下圖:
密鑰文件
顯得非常高大上對(duì)吧!那么它里面是什么,我們可以利用終端進(jìn)行查看.
//查看私鑰文件 hank$ cat private.pem -----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQDbGfA0XdkIpK5h2O9mg5o35pitxwiHDnlpBTCTUH+pkGMdDe6d 9nVQDr61QUEMWAgbnb/irTXh5VigGhHDbG/4kmVy1BgSfLxUx50jmm7jnvnS4Hrb 65g920x26gaBW+I9n9cHF/QShrqaNXP9DDeqhqNzdmrkaaAQQkQ9liN6awIDAQAB AoGAU0gdvNn7WES4oCrEfPQDF8KIQG3KOQPwdFHrr+NGU161veKA0/xNhTvFk8IV BqsjkdO5j2EFfTMfJ+Qg4maCfIZN+xknosXRUF3vz5CUz/rXwBupOlOiWFJbB6cV /Jee045DjiHjciip/ZVd8A2xnUEg4pIFUujAFPH+22t5TvkCQQD73bRqCQF9sWIA tBeNR10Mygx5wrwKvjgCvaawsgx82kuAb3CWR0G81GfU+lK0YaHdmcFHsAHlDncM OtY6IPnNAkEA3rKP6+/jUoylsJPWuN9LyuKjtAlsNtbWaYvs8iCNhLyV9hoWjvow AAZB1uWy5aLDtQI3v48beExwsJEFAlQtFwJASTkKU21s1or0T/oLgtJFdgtjlx6L JqBojjtus53/zWh1XNCJLddngCtMSHnCA5kCwvcJXvsHgf0zlQWh9GJT3QJAY0+q EwN1kpiaQzaKqQMbX6zWaDFTitkf4Q2/avLNaYZYMdnMeZJk2X3w2o6wyutc71m/ 1rNRAsLD9lmVrEYxnQJAEAHb0lsRgWe/sXX2attg4NbDsEExqDZ+7GGsyvqZn1Xg S/UPdt6rVkVQ3N7ZEPKV6SxwN9LySI4lVWmFWhCn6w== -----END RSA PRIVATE KEY----- //查看公鑰文件 hank$ cat public.pem -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbGfA0XdkIpK5h2O9mg5o35pit xwiHDnlpBTCTUH+pkGMdDe6d9nVQDr61QUEMWAgbnb/irTXh5VigGhHDbG/4kmVy 1BgSfLxUx50jmm7jnvnS4Hrb65g920x26gaBW+I9n9cHF/QShrqaNXP9DDeqhqNz dmrkaaAQQkQ9liN6awIDAQAB -----END PUBLIC KEY-----
其實(shí)就是一個(gè)文本文件,并且一看就知道是base64編碼.那么公鑰相比私鑰要簡(jiǎn)單很多.我們可以通過(guò)命令,將私鑰轉(zhuǎn)換成為明文看看.
//轉(zhuǎn)化為明文信息 hank$ openssl rsa -in private.pem -text -out private.txt writing RSA key //查看文本信息 hank$ cat private.txt Private-Key: (1024 bit) modulus: 00:db:19:f0:34:5d:d9:08:a4:ae:61:d8:ef:66:83: 9a:37:e6:98:ad:c7:08:87:0e:79:69:05:30:93:50: 7f:a9:90:63:1d:0d:ee:9d:f6:75:50:0e:be:b5:41: 41:0c:58:08:1b:9d:bf:e2:ad:35:e1:e5:58:a0:1a: 11:c3:6c:6f:f8:92:65:72:d4:18:12:7c:bc:54:c7: 9d:23:9a:6e:e3:9e:f9:d2:e0:7a:db:eb:98:3d:db: 4c:76:ea:06:81:5b:e2:3d:9f:d7:07:17:f4:12:86: ba:9a:35:73:fd:0c:37:aa:86:a3:73:76:6a:e4:69: a0:10:42:44:3d:96:23:7a:6b publicExponent: 65537 (0x10001) privateExponent: 53:48:1d:bc:d9:fb:58:44:b8:a0:2a:c4:7c:f4:03: 17:c2:88:40:6d:ca:39:03:f0:74:51:eb:af:e3:46: 53:5e:b5:bd:e2:80:d3:fc:4d:85:3b:c5:93:c2:15: 06:ab:23:91:d3:b9:8f:61:05:7d:33:1f:27:e4:20: e2:66:82:7c:86:4d:fb:19:27:a2:c5:d1:50:5d:ef: cf:90:94:cf:fa:d7:c0:1b:a9:3a:53:a2:58:52:5b: 07:a7:15:fc:97:9e:d3:8e:43:8e:21:e3:72:28:a9: fd:95:5d:f0:0d:b1:9d:41:20:e2:92:05:52:e8:c0: 14:f1:fe:db:6b:79:4e:f9 prime1: 00:fb:dd:b4:6a:09:01:7d:b1:62:00:b4:17:8d:47: 5d:0c:ca:0c:79:c2:bc:0a:be:38:02:bd:a6:b0:b2: 0c:7c:da:4b:80:6f:70:96:47:41:bc:d4:67:d4:fa: 52:b4:61:a1:dd:99:c1:47:b0:01:e5:0e:77:0c:3a: d6:3a:20:f9:cd prime2: 00:de:b2:8f:eb:ef:e3:52:8c:a5:b0:93:d6:b8:df: 4b:ca:e2:a3:b4:09:6c:36:d6:d6:69:8b:ec:f2:20: 8d:84:bc:95:f6:1a:16:8e:fa:30:00:06:41:d6:e5: b2:e5:a2:c3:b5:02:37:bf:8f:1b:78:4c:70:b0:91: 05:02:54:2d:17 exponent1: 49:39:0a:53:6d:6c:d6:8a:f4:4f:fa:0b:82:d2:45: 76:0b:63:97:1e:8b:26:a0:68:8e:3b:6e:b3:9d:ff: cd:68:75:5c:d0:89:2d:d7:67:80:2b:4c:48:79:c2: 03:99:02:c2:f7:09:5e:fb:07:81:fd:33:95:05:a1: f4:62:53:dd exponent2: 63:4f:aa:13:03:75:92:98:9a:43:36:8a:a9:03:1b: 5f:ac:d6:68:31:53:8a:d9:1f:e1:0d:bf:6a:f2:cd: 69:86:58:31:d9:cc:79:92:64:d9:7d:f0:da:8e:b0: ca:eb:5c:ef:59:bf:d6:b3:51:02:c2:c3:f6:59:95: ac:46:31:9d coefficient: 10:01:db:d2:5b:11:81:67:bf:b1:75:f6:6a:db:60: e0:d6:c3:b0:41:31:a8:36:7e:ec:61:ac:ca:fa:99: 9f:55:e0:4b:f5:0f:76:de:ab:56:45:50:dc:de:d9: 10:f2:95:e9:2c:70:37:d2:f2:48:8e:25:55:69:85: 5a:10:a7:eb -----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQDbGfA0XdkIpK5h2O9mg5o35pitxwiHDnlpBTCTUH+pkGMdDe6d 9nVQDr61QUEMWAgbnb/irTXh5VigGhHDbG/4kmVy1BgSfLxUx50jmm7jnvnS4Hrb 65g920x26gaBW+I9n9cHF/QShrqaNXP9DDeqhqNzdmrkaaAQQkQ9liN6awIDAQAB AoGAU0gdvNn7WES4oCrEfPQDF8KIQG3KOQPwdFHrr+NGU161veKA0/xNhTvFk8IV BqsjkdO5j2EFfTMfJ+Qg4maCfIZN+xknosXRUF3vz5CUz/rXwBupOlOiWFJbB6cV /Jee045DjiHjciip/ZVd8A2xnUEg4pIFUujAFPH+22t5TvkCQQD73bRqCQF9sWIA tBeNR10Mygx5wrwKvjgCvaawsgx82kuAb3CWR0G81GfU+lK0YaHdmcFHsAHlDncM OtY6IPnNAkEA3rKP6+/jUoylsJPWuN9LyuKjtAlsNtbWaYvs8iCNhLyV9hoWjvow AAZB1uWy5aLDtQI3v48beExwsJEFAlQtFwJASTkKU21s1or0T/oLgtJFdgtjlx6L JqBojjtus53/zWh1XNCJLddngCtMSHnCA5kCwvcJXvsHgf0zlQWh9GJT3QJAY0+q EwN1kpiaQzaKqQMbX6zWaDFTitkf4Q2/avLNaYZYMdnMeZJk2X3w2o6wyutc71m/ 1rNRAsLD9lmVrEYxnQJAEAHb0lsRgWe/sXX2attg4NbDsEExqDZ+7GGsyvqZn1Xg S/UPdt6rVkVQ3N7ZEPKV6SxwN9LySI4lVWmFWhCn6w== -----END RSA PRIVATE KEY-----
通過(guò)公鑰加密數(shù)據(jù),私鑰解密數(shù)據(jù)
//生成明文文件 hank$ vi message.txt //查看文件內(nèi)容 hank$ cat message.txt 密碼:123456 //通過(guò)公鑰進(jìn)行加密 hank$ openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt //通過(guò)私鑰進(jìn)行解密 hank$ openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
通過(guò)私鑰加密數(shù)據(jù),公鑰解密數(shù)據(jù)
//通過(guò)私鑰進(jìn)行加密 hank$ openssl rsautl -sign -in message.txt -inkey private.pem -out enc.txt //通過(guò)公鑰進(jìn)行解密 hank$ openssl rsautl -verify -in enc.txt -inkey public.pem -pubin -out dec.txt
小結(jié)
那么看到這些之后,對(duì)RSA應(yīng)該有了一定的了解.由于RSA加密運(yùn)行效率非常低!并不是所有數(shù)據(jù)加密都會(huì)使用它.那么它的主戰(zhàn)場(chǎng)在于加密一些小的數(shù)據(jù),比如對(duì)稱加密算法的密鑰.又或者數(shù)字簽名.關(guān)于數(shù)字簽名后續(xù)文章我們?cè)僭敿?xì)闡述.
以上就是RSA加密解密算法應(yīng)用及延伸探究的詳細(xì)內(nèi)容,更多關(guān)于RSA加密解密算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Apifox?Echo學(xué)習(xí)curl?httpie?命令使用詳解
這篇文章主要為大家介紹了通過(guò)Apifox?Echo學(xué)習(xí)curl?httpie?命令使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09分享最新Sublime Text4 Build 4107注冊(cè)碼(密鑰)漢化及完美永久破解方法
分享一個(gè)適用最新Sublime Text4 Build 4107注冊(cè)碼(密鑰)及Sublime Text 4完美永久破解方法,需要的朋友可以參考下2021-05-05回車和換行有什么區(qū)別?我們平時(shí)按下的Enter鍵是回車還是換行
如果用過(guò)機(jī)械打字機(jī),就知道回車和換行的區(qū)別了。換行就是把滾筒卷一格,不改變水平位置?;剀嚲褪前阉轿恢脧?fù)位,不卷動(dòng)滾筒2011-03-03網(wǎng)站性能提高實(shí)戰(zhàn)經(jīng)驗(yàn)點(diǎn)滴記錄
網(wǎng)站性能提高實(shí)戰(zhàn)經(jīng)驗(yàn)點(diǎn)滴記錄,需要的朋友可以參考下。2011-02-02微信小程序給圖片做動(dòng)態(tài)標(biāo)注的實(shí)例分享
這篇文章主要介紹了微信小程序給圖片做動(dòng)態(tài)標(biāo)注的一個(gè)簡(jiǎn)化的教程,幫助你了解如何在微信小程序中實(shí)現(xiàn)圖片標(biāo)注的功能,需要的朋友可以參考下2023-08-08vscode安裝rainbow-fart(鼓勵(lì)師)插件
這篇文章主要介紹了vscode安裝rainbow-fart(鼓勵(lì)師)插件的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06