title: linux-openssl
成都創(chuàng)新互聯(lián)公司主營駐馬店網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),駐馬店h5重慶小程序開發(fā)搭建,駐馬店網(wǎng)站營銷推廣歡迎駐馬店等地區(qū)企業(yè)咨詢
date: 2020-09-16 11:02:15
categories:
{% note info %}
OpenSSL是一個(gè)健壯的、商業(yè)級(jí)的、功能齊全的開源工具包,用于傳輸層安全(TLS)協(xié)議,以前稱為安全套接字層(Secure Sockets Layer, SSL)協(xié)議。協(xié)議實(shí)現(xiàn)基于全強(qiáng)度通用密碼庫,也可以單獨(dú)使用。
openssl是一個(gè)功能豐富且自包含的開源安全工具箱。它提供的主要功能有:SSL協(xié)議實(shí)現(xiàn)(包括SSLv2、SSLv3和TLSv1)、大量軟算法(對稱/非對稱/摘要)、大數(shù)運(yùn)算、非對稱算法密鑰生成、ASN.1編解碼庫、證書請求(PKCS10)編解碼、數(shù)字證書編解碼、CRL編解碼、OCSP協(xié)議、數(shù)字證書驗(yàn)證、PKCS7標(biāo)準(zhǔn)實(shí)現(xiàn)和PKCS12個(gè)人數(shù)字證書格式實(shí)現(xiàn)等功能。
span style="color:red;"項(xiàng)目地址/span span style="color:red;"官方網(wǎng)址/span span style="color:red;"手冊/span
{% endnote %}
{% tabs configtab, 1 %}
對稱算法使用一個(gè)密鑰。給定一個(gè)明文和一個(gè)密鑰,加密產(chǎn)生密文,其長度和明文大致相同。解密時(shí),使用讀密鑰與加密密鑰相同。
ECB\CBC\CFB\OFB
摘要算法是一種能產(chǎn)生特殊輸出格式的算法,這種算法的特點(diǎn)是:無論用戶輸入什么長度的原始數(shù)據(jù),經(jīng)過計(jì)算后輸出的密文都是固定長度的,這種算法的原理是根據(jù)一定的運(yùn)算規(guī)則對原數(shù)據(jù)進(jìn)行某種形式的提取,這種提取就是摘要,被摘要的數(shù)據(jù)內(nèi)容與原數(shù)據(jù)有密切聯(lián)系,只要原數(shù)據(jù)稍有改變,輸出的“摘要”便完全不同,因此,基于這種原理的算法便能對數(shù)據(jù)完整性提供較為健全的保障。但是,由于輸出的密文是提取原數(shù)據(jù)經(jīng)過處理的定長值,所以它已經(jīng)不能還原為原數(shù)據(jù),即消息摘要算法是不可逆的,理論上無法通過反向運(yùn)算取得原數(shù)據(jù)內(nèi)容,因此它通常只能被用來做數(shù)據(jù)完整性驗(yàn)證。
如今常用的“消息摘要”算法經(jīng)歷了多年驗(yàn)證發(fā)展而保留下來的算法已經(jīng)不多,這其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等。
常用的摘要算法主要有MD5和SHA1。MD5的輸出結(jié)果為16字節(jié),sha1的輸出結(jié)果為20字節(jié)。
在公鑰密碼系統(tǒng)中,加密和解密使用的是不同的密鑰,這兩個(gè)密鑰之間存在著相互依存關(guān)系:即用其中任一個(gè)密鑰加密的信息只能用另一個(gè)密鑰進(jìn)行解密。這使得通信雙方無需事先交換密鑰就可進(jìn)行保密通信。其中加密密鑰和算法是對外公開的,人人都可以通過這個(gè)密鑰加密文件然后發(fā)給收信者,這個(gè)加密密鑰又稱為公鑰;而收信者收到加密文件后,它可以使用他的解密密鑰解密,這個(gè)密鑰是由他自己私人掌管的,并不需要分發(fā),因此又成稱為私鑰,這就解決了密鑰分發(fā)的問題。
主要的公鑰算法有:RSA、DSA、DH和ECC。
Openssl中大量用到了回調(diào)函數(shù)?;卣{(diào)函數(shù)一般定義在數(shù)據(jù)結(jié)構(gòu)中,是一個(gè)函數(shù)指針。通過回調(diào)函數(shù),客戶可以自行編寫函數(shù),讓openssl函數(shù)來調(diào)用它,即用戶調(diào)用openssl提供的函數(shù),openssl函數(shù)再回調(diào)用戶提供的函數(shù)。這樣方便了用戶對openssl函數(shù)操作的控制。在openssl實(shí)現(xiàn)函數(shù)中,它一般會(huì)實(shí)現(xiàn)一個(gè)默認(rèn)的函數(shù)來進(jìn)行處理,如果用戶不設(shè)置回調(diào)函數(shù),則采用它默認(rèn)的函數(shù)。
{% endtabs %}
這里以字符串123456為例子,它的md5密文值為:e10adc3949ba59abbe56e057f20f883e
這里以1.txt為需要被加密的文件。
一、 用oppnssl md5 加密字符串和文件的方法。
1. oppnssl md5 加密字符串的方法
a.手動(dòng)輸入命令及過程如下:
#openssl //在終端中輸入openssl后回車。
OpenSSL md5 //輸入md5后回車
123456 //接著輸入123456,不要輸入回車。然后按3次ctrl+d。
123456e10adc3949ba59abbe56e057f20f883e //123456后面的就是密文了
解釋:為何在輸入123456后不回車呢?
是因?yàn)閛penssl默認(rèn)會(huì)把回車符當(dāng)做要加密的字符串中的一個(gè)字符,所以得到的結(jié)果不同。如果你輸入123456后回車,在按2次ctrl+d。得到的結(jié)果是:
OpenSSL md5
123456
f447b20a7fcbf53a5d5be013ea0b15af //因?yàn)閛penssl不忽略回車符導(dǎo)致的
b.或者直接用管道命令
# echo -n 123456 | openssl md5 //必須要有-n參數(shù),否則就不是這個(gè)結(jié)果了。
e10adc3949ba59abbe56e057f20f883e
解釋:為何要加-n這個(gè)參數(shù)?
-n就表示不輸入回車符,這樣才能得到正確的結(jié)果。如果你不加-n,那么結(jié)果和前面說的一樣為:
f447b20a7fcbf53a5d5be013ea0b15af //因?yàn)閛penssl不忽略回車符導(dǎo)致的
2.用openssl加密文件。
#openssl md 5 -in 1.txt
##################################################3
Openssl其他相關(guān)加密的命令參數(shù):引自:實(shí)用命令:利用openssl進(jìn)行BASE64編碼解碼、md5/sha1摘要、AES/DES3加密解密 收藏
一. 利用openssl命令進(jìn)行BASE64編碼解碼(base64 encode/decode)
1. BASE64編碼命令
對字符串‘a(chǎn)bc’進(jìn)行base64編碼:
# echo abc | openssl base64
YWJjCg== (編碼結(jié)果)
如果對一個(gè)文件進(jìn)行base64編碼(文件名t.txt):
# openssl base64 -in t.txt
2. BASE64解碼命令
求base64后的字符串‘YWJjCg==’的原文:
# echo YWJjCg== | openssl base64 -d
abc (解碼結(jié)果)
如果對一個(gè)文件進(jìn)行base64解碼(文件名t.base64):
# openssl base64 -d -in t.base64
二. 利用openssl命令進(jìn)行md5/sha1摘要(digest)
1. 對字符串‘a(chǎn)bc’進(jìn)行md5摘要計(jì)算:echo abc | openssl md5
若對某文件進(jìn)行md5摘要計(jì)算:openssl md5 -in t.txt
2. 對字符串‘a(chǎn)bc’進(jìn)行sha1摘要計(jì)算:echo abc | openssl sha1
若對某文件進(jìn)行sha1摘要計(jì)算:openssl sha1 -in t.txt
三. 利用openssl命令進(jìn)行AES/DES3加密解密(AES/DES3 encrypt/decrypt)
對字符串‘a(chǎn)bc’進(jìn)行aes加密,使用密鑰123,輸出結(jié)果以base64編碼格式給出:
# echo abc | openssl aes-128-cbc -k 123 -base64
U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= (結(jié)果)
對以上結(jié)果進(jìn)行解密處理:
# echo U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= | openssl aes-128-cbc -d -k 123 -base64
abc (結(jié)果)
若要從文件里取原文(密文)進(jìn)行加密(解密),只要指定 -in 參數(shù)指向文件名就可以了。
進(jìn)行des3加解密,只要把命令中的aes-128-cbc換成des3就可以了。
注:只要利用openssl help就可以看到更多的安全算法了。
###############################################
二、 利用php的md5函數(shù)加密字符串
#touch a.php //創(chuàng)建a.php文件
#vi a.php //用vi 編輯a.php文件
將?php echo md5(123456); ?輸入進(jìn)去后保存
#php a.php //運(yùn)行a.php文件
顯示:e10adc3949ba59abbe56e057f20f883e
三、 利用md5sum命令
A.在linux或Unix上,md5sum是用來計(jì)算和校驗(yàn)文件報(bào)文摘要的工具程序。一般來說,安裝了Linux后,就會(huì)有md5sum這個(gè)工具,直接在命令行終端直接運(yùn)行??梢杂孟旅娴拿顏慝@取md5sum命令幫助 man md5sum
#md5sum –help
有個(gè)提示:“With no FILE, or when FILE is -, read standard input.”翻譯過來就是“如果沒有輸入文件選項(xiàng)或者文件選項(xiàng)為 - ,則從標(biāo)磚讀取輸入內(nèi)容”,即可以直接從鍵盤讀取字符串來加密。
利用md5sum加密字符串的方法
# md5sum //然后回車
123456 //輸入123456.然后按兩次ctrl+d.
顯示:
123456e10adc3949ba59abbe56e057f20f883e 紅色代表加密后的值
還可以用管道命令:
#echo -n '123123' | md5sum
或者寫成md5加密腳本,名字叫md5.sh,
將以下內(nèi)容復(fù)制進(jìn)腳本里:
#!/bin/bash
echo -n $1 | md5sum | awk '{print $1}'
保存后,給腳本執(zhí)行權(quán)限。
#sh md5.sh 123456
顯示:e10adc3949ba59abbe56e057f20f883e
B.其實(shí)也可以將文本放入文本文件,然后用md5sum 加密改文本,也可以得到字符串加密的值。過程如下:
#touch a.txt
#echo -n 123456 a.txt //將123456寫進(jìn)文本文件,不能丟了 –n參數(shù),避免回車符干擾
#md5sum a.txt
顯示:e10adc3949ba59abbe56e057f20f883e a.txt
ctrl+d有兩個(gè)含義:
一是向程序發(fā)送文件輸入結(jié)束符EOF。
二是向程序發(fā)送exit退出指令。程序收到信號(hào)后具體動(dòng)作是結(jié)束輸入、然后等待,還是直接退出,那就要看該程序捕獲信號(hào)后是如何操作的了。
md5sum屬于第一個(gè)含義。兩次strl+d了,第一次讀取EOF指令,再次捕獲就會(huì)當(dāng)成exit指令。而shell一類的程序,會(huì)直接把ctrl+d解析為退出指令。
在linux下完全使用root是個(gè)不好的習(xí)慣(這與windows是不同的,因?yàn)閘inux是為多用戶設(shè)計(jì)的,普通用戶的權(quán)限就已經(jīng)可以進(jìn)行很多常用的操作的,這樣也是為了保證系統(tǒng)的安全)
所以你沒必要非得su到root用戶不可,但你需要root權(quán)限的時(shí)候,可以在命令前加上sudo,如sudo ls 這是以root權(quán)限執(zhí)行的ls;當(dāng)然了,默認(rèn)也得你輸入當(dāng)前普通用戶的密碼認(rèn)證下。
如果你很熟練了,可以編輯配置文件/etc/sudoers:
sudoedit /etc/sudoers
然后添加一行: (將zwang改成你當(dāng)前的用戶名)
zwang ALL=(ALL) NOPASSWD: ALL
保存后就可以執(zhí)行sudo 前綴的命令時(shí)不需要輸入密碼了。