淺談RSA

image.png

上一篇文章,我們了解了一下Hash算法,那么這篇文章,我們一起來了解一下RSA.

RSA概述

首先看這個(gè)加密算法的命名.很有意思,它其實(shí)是三個(gè)人的名字.早在1977年由麻省理工學(xué)院的三位數(shù)學(xué)家Rivest、Shamir 和 Adleman一起提出了這個(gè)加密算法,并且用他們?nèi)齻€(gè)人姓氏開頭字母命名.
RSA加密算法是一種非對稱加密算法,其玩法打破了以往所有加密算法的規(guī)則.在RSA出現(xiàn)之前,所有的加密方法都是同一種模式:加密解密的規(guī)則使用同一種方式.這種長達(dá)幾個(gè)世紀(jì)的加密方案有一個(gè)致命的缺陷.在傳遞加密信息時(shí),必須讓對方拿到解密的規(guī)則才能正常解密.由于加密解密的規(guī)則一致,所以保存和傳遞"密鑰",就成了最頭疼的問題。
RSA的出現(xiàn)解決了這個(gè)問題.我們來看看RSA是怎么玩的.

RSA加密/解密

  • 使用公鑰加密的數(shù)據(jù),利用私鑰進(jìn)行解密
  • 使用私鑰加密的數(shù)據(jù),利用公鑰進(jìn)行解密

沒錯(cuò),RSA加密使用了"一對"密鑰.分別是公鑰私鑰,這個(gè)公鑰和私鑰其實(shí)就是一組數(shù)字!其二進(jìn)制位長度可以是1024位或者2048位.長度越長其加密強(qiáng)度越大,目前為止公之于眾的能破解的最大長度為768位密鑰,只要高于768位,相對就比較安全.所以目前為止,這種加密算法一直被廣泛使用.

RSA的弊端

由于RSA算法的原理都是大數(shù)計(jì)算壳嚎,使得RSA最快的情況也比對稱加密算法慢上好幾倍。速度一直是RSA的缺陷,一般來說RSA只用于小數(shù)據(jù)的加密.RSA的速度是對應(yīng)同樣安全級別的對稱加密算法的1/1000左右框全。

RSA終端命令演示

由于Mac系統(tǒng)內(nèi)置OpenSSL(開源加密庫),所以我們可以直接在終端上使用命令來玩RSA.
OpenSSL中RSA算法常用指令主要有三個(gè)哑诊,其他指令此處不介紹扛点。

命令 含義
genrsa 生成并輸入一個(gè)RSA私鑰
rsautl 使用RSA密鑰進(jìn)行加密喳张、解密续镇、簽名和驗(yàn)證等運(yùn)算
rsa 處理RSA密鑰的格式轉(zhuǎn)換等問題

生成RSA私鑰,密鑰長度為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

我們可以看到生成的私鑰和公鑰文件如下圖:


密鑰文件

顯得非常高大上對吧!那么它里面是什么,我們可以利用終端進(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編碼.那么公鑰相比私鑰要簡單很多.我們可以通過命令,將私鑰轉(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-----

通過公鑰加密數(shù)據(jù),私鑰解密數(shù)據(jù)

//生成明文文件
hank$ vi message.txt
//查看文件內(nèi)容
hank$ cat message.txt
密碼:123456
//通過公鑰進(jìn)行加密
hank$ openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt
//通過私鑰進(jìn)行解密
hank$ openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt

通過私鑰加密數(shù)據(jù),公鑰解密數(shù)據(jù)

//通過私鑰進(jìn)行加密
hank$ openssl rsautl -sign -in message.txt -inkey private.pem -out enc.txt
//通過公鑰進(jìn)行解密
hank$ openssl rsautl -verify -in enc.txt -inkey public.pem -pubin -out dec.txt

小結(jié)

那么看到這些之后,對RSA應(yīng)該有了一定的了解.由于RSA加密運(yùn)行效率非常低!并不是所有數(shù)據(jù)加密都會使用它.那么它的主戰(zhàn)場在于加密一些小的數(shù)據(jù),比如對稱加密算法的密鑰.又或者數(shù)字簽名.關(guān)于數(shù)字簽名后續(xù)文章我們再詳細(xì)闡述.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市销部,隨后出現(xiàn)的幾起案子摸航,更是在濱河造成了極大的恐慌,老刑警劉巖舅桩,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酱虎,死亡現(xiàn)場離奇詭異,居然都是意外死亡擂涛,警方通過查閱死者的電腦和手機(jī)读串,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撒妈,“玉大人恢暖,你說我怎么就攤上這事〔壬恚” “怎么了胀茵?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵社露,是天一觀的道長挟阻。 經(jīng)常有香客問我,道長峭弟,這世上最難降的妖魔是什么附鸽? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮瞒瘸,結(jié)果婚禮上坷备,老公的妹妹穿的比我還像新娘。我一直安慰自己情臭,他們只是感情好省撑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布赌蔑。 她就那樣靜靜地躺著,像睡著了一般竟秫。 火紅的嫁衣襯著肌膚如雪娃惯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天肥败,我揣著相機(jī)與錄音趾浅,去河邊找鬼。 笑死馒稍,一個(gè)胖子當(dāng)著我的面吹牛皿哨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纽谒,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼证膨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了佛舱?” 一聲冷哼從身側(cè)響起椎例,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎请祖,沒想到半個(gè)月后订歪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肆捕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年刷晋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慎陵。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡眼虱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出席纽,到底是詐尸還是另有隱情捏悬,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布润梯,位于F島的核電站过牙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纺铭。R本人自食惡果不足惜寇钉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舶赔。 院中可真熱鬧扫倡,春花似錦、人聲如沸竟纳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缘挑,卻和暖如春石咬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卖哎。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工鬼悠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亏娜。 一個(gè)月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓焕窝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親维贺。 傳聞我的和親對象是個(gè)殘疾皇子它掂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容