使用curl操作githubAPIV3(1)

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是一个什么概念。

创新互联建站长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为白城企业提供专业的成都网站制作、网站设计、外贸网站建设白城网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

1)HTTPS,通常意义上就是HTTP协议都是传输的公开文本数据,任何一台中间代理机器都可以截取并查看这些数据,要使这些数据虽然被截取到但是不能查看,那怎么办呢?唯一个办法就是加密。那么怎么加密呢?怎么解密呢?显然服务器端需要将数据加密然后发给客户端,客户端进行解密,客户端怎么解密呢?这就是SSL V2/V3和TLS协议。因为这一块比较复杂,那么首先从数据的加密与解密来说。传统的加密解密过程如下:

使用curl操作github API V3(1)

很显然在上述过程中我们使用的是一个相同的KEY和两套不同的加密与解密算法。在这其中,如下图所示,KEY是公共的。因为KEY是公共的并且私有保密的。所以算法不再是核心关键,也就是说就算算法公开,没有KEY也无法解密这个数据,通常设计这些KEY是非常有讲究的,因为要避免别人暴力破解。

使用curl操作github API V3(1)

开源安全库Openssl提供了一个工具命令可以进行上述的加密与解密过程。使用如下命令:

使用curl操作github API V3(1)

上述命令支持比较著名的一些通用加密算法有DES/AES等,下面使用一个文本文件试验一下:

使用curl操作github API V3(1)

从上面的操作中可以看出,加密与解密严重依赖于这个公共的KEY,显然这种方法无法应用于HTTP网站的通讯,HTTP网站服务端与客户端不可能预先协商一个公共密钥出来。所以经典加密在HTTP网站上基本行不通,于是出现了另外一种加密与解密方法,这就是非对称加密,与前面加密方法相对应,前述方法通常称之为对称加密。非对称加密是怎么样呢?非对称加密与对称加密最大的区别就在于加密时使用的是一个公共密钥。经过这个公共密钥加密的数据只有一个私有密钥可以解密。如下图所示:

使用curl操作github API V3(1)

显然这种加密与解密的过程中,公共密钥是一个关键,显然它可以公开,但是也必须确保它与私钥匹配。还有一个加密方还需要对公钥的来源进行确认,以防止非法公钥使用。这种加密与解密的过程显然会导致公钥相对于密钥的唯一性,不再是简单的密码。可能也是一个复杂的密文。也就是说我们首先要通过一定的算法算出唯一的一对公钥与私钥。因为加密与解密使用是不同的密钥,显然性能是大大受到影响。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
#

非对称加密显然最关键的一点就是公钥与密钥这一对是唯一的,那显然用私钥加密,如果能通过公钥解开,那就证明这个文件是私钥加过密的,因为一个公钥肯定只解一个私钥。当然这当中需要确定的是算法保证。如果算法不能保证这种一一对应,那是不能够进行证明的。显然目前RSA算法是可以的。如下图所示:

使用curl操作github API V3(1)

显然Openssl也提供了相应的命令行来支持这种操作如下图:

使用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?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
#


网站名称:使用curl操作githubAPIV3(1)
URL分享:http://scyanting.com/article/pdsjph.html