您好,登錄后才能下訂單哦!
Curl,官方解釋是一個命令行工具,用來傳輸URI資源數據,支持HTTP,HTTPS,FTP,FTPS,IMAP等。支持HTTP GET/PUT, FTP Uploading等,也支持代理,SSL等,可以說是一個強大網絡操作工具。最新版本是7.29. 官方網站是http://curl.haxx.se。 相對應的Curl還提供了一個libcurl作為一個容易使用的客戶端URL傳輸庫,同樣支持以上特點 。使用Curl 操作GITHUP,需要涉及到三個概念,第一個概念就是GITHUP網站是HTTPS,不是HTTP,是SSL加密網站。第二個GITHUP API是OATH授權的,第三個是CURL的一些基本操作。首先看HTTPS是一個什么概念。
1)HTTPS,通常意義上就是HTTP協議都是傳輸的公開文本數據,任何一臺中間代理機器都可以截取并查看這些數據,要使這些數據雖然被截取到但是不能查看,那怎么辦呢?唯一個辦法就是加密。那么怎么加密呢?怎么解密呢?顯然服務器端需要將數據加密然后發給客戶端,客戶端進行解密,客戶端怎么解密呢?這就是SSL V2/V3和TLS協議。因為這一塊比較復雜,那么首先從數據的加密與解密來說。傳統的加密解密過程如下:
很顯然在上述過程中我們使用的是一個相同的KEY和兩套不同的加密與解密算法。在這其中,如下圖所示,KEY是公共的。因為KEY是公共的并且私有保密的。所以算法不再是核心關鍵,也就是說就算算法公開,沒有KEY也無法解密這個數據,通常設計這些KEY是非常有講究的,因為要避免別人暴力破解。
開源安全庫Openssl提供了一個工具命令可以進行上述的加密與解密過程。使用如下命令:
上述命令支持比較著名的一些通用加密算法有DES/AES等,下面使用一個文本文件試驗一下:
從上面的操作中可以看出,加密與解密嚴重依賴于這個公共的KEY,顯然這種方法無法應用于HTTP網站的通訊,HTTP網站服務端與客戶端不可能預先協商一個公共密鑰出來。所以經典加密在HTTP網站上基本行不通,于是出現了另外一種加密與解密方法,這就是非對稱加密,與前面加密方法相對應,前述方法通常稱之為對稱加密。非對稱加密是怎么樣呢?非對稱加密與對稱加密最大的區別就在于加密時使用的是一個公共密鑰。經過這個公共密鑰加密的數據只有一個私有密鑰可以解密。如下圖所示:
顯然這種加密與解密的過程中,公共密鑰是一個關鍵,顯然它可以公開,但是也必須確保它與私鑰匹配。還有一個加密方還需要對公鑰的來源進行確認,以防止非法公鑰使用。這種加密與解密的過程顯然會導致公鑰相對于密鑰的唯一性,不再是簡單的密碼。可能也是一個復雜的密文。也就是說我們首先要通過一定的算法算出唯一的一對公鑰與私鑰。因為加密與解密使用是不同的密鑰,顯然性能是大大受到影響。Openssl也支持這種加密方式,通常最常用的是RSA加密算法。如下圖所示:
操作如下:
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
#
非對稱加密顯然最關鍵的一點就是公鑰與密鑰這一對是唯一的,那顯然用私鑰加密,如果能通過公鑰解開,那就證明這個文件是私鑰加過密的,因為一個公鑰肯定只解一個私鑰。當然這當中需要確定的是算法保證。如果算法不能保證這種一一對應,那是不能夠進行證明的。顯然目前RSA算法是可以的。如下圖所示:
顯然Openssl也提供了相應的命令行來支持這種操作如下圖:
操作如下圖:
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
#
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。