溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用curl操作github API V3(1)

發(fā)布時(shí)間:2020-07-03 05:01:07 來(lái)源:網(wǎng)絡(luò) 閱讀:1161 作者:hbxu 欄目:安全技術(shù)

Curl,官方解釋是一個(gè)命令行工具,用來(lái)傳輸U(kuò)RI資源數(shù)據(jù),支持HTTP,HTTPS,FTP,FTPS,IMAP等。支持HTTP GET/PUT, FTP Uploading等,也支持代理,SSL等,可以說(shuō)是一個(gè)強(qiáng)大網(wǎng)絡(luò)操作工具。最新版本是7.29. 官方網(wǎng)站是http://curl.haxx.se。 相對(duì)應(yīng)的Curl還提供了一個(gè)libcurl作為一個(gè)容易使用的客戶端URL傳輸庫(kù),同樣支持以上特點(diǎn) 。使用Curl 操作GITHUP,需要涉及到三個(gè)概念,第一個(gè)概念就是GITHUP網(wǎng)站是HTTPS,不是HTTP,是SSL加密網(wǎng)站。第二個(gè)GITHUP API是OATH授權(quán)的,第三個(gè)是CURL的一些基本操作。首先看HTTPS是一個(gè)什么概念。

1)HTTPS,通常意義上就是HTTP協(xié)議都是傳輸?shù)墓_文本數(shù)據(jù),任何一臺(tái)中間代理機(jī)器都可以截取并查看這些數(shù)據(jù),要使這些數(shù)據(jù)雖然被截取到但是不能查看,那怎么辦呢?唯一個(gè)辦法就是加密。那么怎么加密呢?怎么解密呢?顯然服務(wù)器端需要將數(shù)據(jù)加密然后發(fā)給客戶端,客戶端進(jìn)行解密,客戶端怎么解密呢?這就是SSL V2/V3和TLS協(xié)議。因?yàn)檫@一塊比較復(fù)雜,那么首先從數(shù)據(jù)的加密與解密來(lái)說(shuō)。傳統(tǒng)的加密解密過(guò)程如下:

使用curl操作github API V3(1)

很顯然在上述過(guò)程中我們使用的是一個(gè)相同的KEY和兩套不同的加密與解密算法。在這其中,如下圖所示,KEY是公共的。因?yàn)镵EY是公共的并且私有保密的。所以算法不再是核心關(guān)鍵,也就是說(shuō)就算算法公開,沒(méi)有KEY也無(wú)法解密這個(gè)數(shù)據(jù),通常設(shè)計(jì)這些KEY是非常有講究的,因?yàn)橐苊鈩e人暴力破解。

使用curl操作github API V3(1)

開源安全庫(kù)Openssl提供了一個(gè)工具命令可以進(jìn)行上述的加密與解密過(guò)程。使用如下命令:

使用curl操作github API V3(1)

上述命令支持比較著名的一些通用加密算法有DES/AES等,下面使用一個(gè)文本文件試驗(yàn)一下:

使用curl操作github API V3(1)

從上面的操作中可以看出,加密與解密嚴(yán)重依賴于這個(gè)公共的KEY,顯然這種方法無(wú)法應(yīng)用于HTTP網(wǎng)站的通訊,HTTP網(wǎng)站服務(wù)端與客戶端不可能預(yù)先協(xié)商一個(gè)公共密鑰出來(lái)。所以經(jīng)典加密在HTTP網(wǎng)站上基本行不通,于是出現(xiàn)了另外一種加密與解密方法,這就是非對(duì)稱加密,與前面加密方法相對(duì)應(yīng),前述方法通常稱之為對(duì)稱加密。非對(duì)稱加密是怎么樣呢?非對(duì)稱加密與對(duì)稱加密最大的區(qū)別就在于加密時(shí)使用的是一個(gè)公共密鑰。經(jīng)過(guò)這個(gè)公共密鑰加密的數(shù)據(jù)只有一個(gè)私有密鑰可以解密。如下圖所示:

使用curl操作github API V3(1)

顯然這種加密與解密的過(guò)程中,公共密鑰是一個(gè)關(guān)鍵,顯然它可以公開,但是也必須確保它與私鑰匹配。還有一個(gè)加密方還需要對(duì)公鑰的來(lái)源進(jìn)行確認(rèn),以防止非法公鑰使用。這種加密與解密的過(guò)程顯然會(huì)導(dǎo)致公鑰相對(duì)于密鑰的唯一性,不再是簡(jiǎn)單的密碼??赡芤彩且粋€(gè)復(fù)雜的密文。也就是說(shuō)我們首先要通過(guò)一定的算法算出唯一的一對(duì)公鑰與私鑰。因?yàn)榧用芘c解密使用是不同的密鑰,顯然性能是大大受到影響。Openssl也支持這種加密方式,通常最常用的是RSA加密算法。如下圖所示:

使用curl操作github API V3(1)

操作如下:

dvkx47@FC7R5S1 /home/cipan
# openssl genrsa -out privatekey 1024
Generating RSA private key, 1024 bit long modulus
........++++++
....++++++
e is 65537 (0x10001)

dvkx47@FC7R5S1 /home/cipan
# cat privatekey
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQD3wRgIhsejsP5nPE4T0Ux4Tf0B9SJYbl61v5RmQsXPR03PZwLJ
yomY65o079Yk7ePfXV674LUU4/jPMwJ9QpQR8i62oR8MMBUjbhLTQU5EusHXsxfY
Wr2xQwL3HQwrDW5gm5hqPxCX1hwPTlePnJ4wL6CFHa+30W02bRXcGqSpcQIDAQAB
AoGBAIwhf0JzWT/QwFQL2+2BmEsDcXNF/2MdKhyKe5lLcy7GGdCRZxZTpHgF6na+
oNTKaPTRjt+dPU7Pks8+/s1yduSCvOkViDfGvZ/lKXnj7jVA/TPFD6nsjh2F30mY
ZyZgag2pV9YnAvh2SIvcJXxvdUU3FMcPiZZqAhD4mE7pEQFBAkEA/YCdhcyu94fx
3TqfDpp2tJ8fh/py+fqPWksvhVbdq21Sqegpj4yqnZkTQVfWNAp+OgbPjK6PArKA
WbxOEfxHlQJBAPox+wixjO+x6qIn6IYS2plN3UDG05mPDACqMR80BrGWqBhhcTsD
a1Oh55IA6HmN8cxQp3m9aN9bMPzv66w5s20CQBjjIZPbLmo6vHH9qVPjsje1T4Eo
A1WrVZuFuhqbFpQX3X+0vS/MnYtvVcaaevsM9Kt5s7KaCIw5PgSRShDV9akCQEJl
YSk9dRlnLc06qgpqlnh5oW6/VQg7XgQPJloRhHU8df+CXHo8vg7Dt5DXjNo1QSXn
gYpdKaecm7OEOBbMeUECQQCV+UNy1TebuOJQIEKLTj7XXhcaH60fcD10OpB9zngc
EsjY+24AmZCR5sb1BRD1vh0dcgFSgaOfgUwMRtkEF/Ml
-----END RSA PRIVATE KEY-----

dvkx47@FC7R5S1 /home/cipan
# openssl rsa -in privatekey  -pubout > pub.key
writing RSA key

dvkx47@FC7R5S1 /home/cipan
# cat pub.key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3wRgIhsejsP5nPE4T0Ux4Tf0B
9SJYbl61v5RmQsXPR03PZwLJyomY65o079Yk7ePfXV674LUU4/jPMwJ9QpQR8i62
oR8MMBUjbhLTQU5EusHXsxfYWr2xQwL3HQwrDW5gm5hqPxCX1hwPTlePnJ4wL6CF
Ha+30W02bRXcGqSpcQIDAQAB
-----END PUBLIC KEY-----

dvkx47@FC7R5S1 /home/cipan
# openssl rsautl -in plaintext_origin  -out ciphertext_rsa -inkey pub.key  -pub
in -encrypt

dvkx47@FC7R5S1 /home/cipan
# cat ciphertext_rsa
x;?Q9???????UE??Qq?n!???k/????s&?5??????qr*?N':?K??4?Y?
?DI?'rFC#????????r????:r?8???Y  &#?'?|??L}|?-#??SM?S`-&5XZy
dvkx47@FC7R5S1 /home/cipan
# openssl rsautl -in ciphertext_rsa  -out plaintext_new_rsa -inkey privatekey -
decrypt

dvkx47@FC7R5S1 /home/cipan
# cat plaintext_new_rsa
I am a plaintext, -------------------
------------------------------------

dvkx47@FC7R5S1 /home/cipan
#

非對(duì)稱加密顯然最關(guān)鍵的一點(diǎn)就是公鑰與密鑰這一對(duì)是唯一的,那顯然用私鑰加密,如果能通過(guò)公鑰解開,那就證明這個(gè)文件是私鑰加過(guò)密的,因?yàn)橐粋€(gè)公鑰肯定只解一個(gè)私鑰。當(dāng)然這當(dāng)中需要確定的是算法保證。如果算法不能保證這種一一對(duì)應(yīng),那是不能夠進(jìn)行證明的。顯然目前RSA算法是可以的。如下圖所示:

使用curl操作github API V3(1)

顯然Openssl也提供了相應(yīng)的命令行來(lái)支持這種操作如下圖:

使用curl操作github API V3(1) 

操作如下圖:

dvkx47@FC7R5S1 /home/cipan
# ls
ciphertext      crytxt.txt     plaintext_new_rsa  privatekey
ciphertext_rsa  plaintext_new  plaintext_origin   pub.key

dvkx47@FC7R5S1 /home/cipan
# openssl rsautl -in plaintext_origin  -out ciphertext.sig -inkey privatekey  -
sign

dvkx47@FC7R5S1 /home/cipan
# ll
bash: ll: command not found

dvkx47@FC7R5S1 /home/cipan
# ls
ciphertext      ciphertext_rsa  plaintext_new      plaintext_origin  pub.key
ciphertext.sig  crytxt.txt      plaintext_new_rsa  privatekey

dvkx47@FC7R5S1 /home/cipan
# cat ciphertext.sig
vNC:hj?%=???5S??Η?CW?=??o??!????[      ??#X?O$??U4?%1??,?w?A0Y????%???oQ???k??=
%????'?S?<R??#???;?P? ??b?p?_
dvkx47@FC7R5S1 /home/cipan
# openssl rsautl -in ciphertext.sig  -out plaintext_new_sign -inkey pub.key  -p
ubin -verify

dvkx47@FC7R5S1 /home/cipan
# cat plaintext_new_sign
I am a plaintext, -------------------
-------------------------------------

dvkx47@FC7R5S1 /home/cipan
#

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI