單向散列函數(shù)(one-wayfunction)有一個(gè)輸入和一個(gè)輸出,其中輸入稱為消息(message),輸出稱為散列值 (hashvalue)。單向散列函數(shù)可以根據(jù)消息的內(nèi)容計(jì)算出散列值,而散列值就可以被用來檢查消息的完整性。
創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、小程序定制開發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十多年以來,已經(jīng)為成百上千家崗?fù)?/a>各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的成百上千家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。
這里的消息不一定是人類能夠讀懂的文字,也可以是圖像文件或者聲音文件。單向散列函數(shù)不需要知道消息實(shí)
際代表的含義。無論任何消息,單向散列函數(shù)都會(huì)將它作為單純的比特序列來處理,即根據(jù)比特序列計(jì)算出散
列值。
散列值的長度和消息的長度無關(guān)。無論消息是1比特,還是100MB,甚至是IOOGB,單向散列函數(shù)都會(huì)計(jì)算出固 定長度的散列值。以SHA-I單向散列函數(shù)為例,它所計(jì)算出的散列值的長度永遠(yuǎn)是160比特(20字節(jié))。
單向散列函數(shù)的相關(guān)術(shù)語有很多變體,不同參考資料中所使用的術(shù)語也不同,下面我們就介紹其中的兒個(gè)。 單向散列函數(shù)也稱為 消息摘要函數(shù)(message digest function) 、 哈希函數(shù) 或者 雜湊函數(shù) 。 輸入單向散列函數(shù)的消息也稱為 原像 (pre-image) 。
單向散列函數(shù)輸出的散列值也稱為 消息摘要 (message digest)或者 指紋 (fingerprint)。 完整性 也稱為一致性。
MD4是由Rivest于1990年設(shè)計(jì)的單向散列函數(shù),能夠產(chǎn)生128比特的散列值(RFC1186,修訂版RFC1320)。不 過,隨著Dobbertin提出尋找MD4散列碰撞的方法,因此現(xiàn)在它已經(jīng)不安全了。
MD5是由Rwest于1991年設(shè)計(jì)的單項(xiàng)散列函數(shù),能夠產(chǎn)生128比特的散列值(RFC1321)。
MD5的強(qiáng)抗碰撞性已經(jīng)被攻破,也就是說,現(xiàn)在已經(jīng)能夠產(chǎn)生具備相同散列值的兩條不同的消息,因此它也已
經(jīng)不安全了。
MD4和MD5中的MD是消息摘要(Message Digest)的縮寫。
SHA-1是由NIST(NationalInstituteOfStandardsandTechnology,美國國家標(biāo)準(zhǔn)技術(shù)研究所)設(shè)計(jì)的一種能夠產(chǎn)生 160比特的散列值的單向散列函數(shù)。1993年被作為美國聯(lián)邦信息處理標(biāo)準(zhǔn)規(guī)格(FIPS PUB 180)發(fā)布的是 SHA,1995年發(fā)布的修訂版FIPS PUB 180-1稱為SHA-1。
SHA-1的消息長度存在上限,但這個(gè)值接近于2^64比特,是個(gè)非常巨大的數(shù)值,因此在實(shí)際應(yīng)用中沒有問題。
SHA-256、SHA-384和SHA-512都是由NIST設(shè)計(jì)的單向散列函數(shù),它們的散列值長度分別為256比特、384比特和
512比特。這些單向散列函數(shù)合起來統(tǒng)稱SHA-2,它們的消息長度也存在上限(SHA-256的上限接近于 2^64 比特,
SHA-384 和 SHA-512的上限接近于 2^128 比特)。這些單向散列函數(shù)是于2002年和 SHA-1 一起作為 FIPS PUB 180-2 發(fā)布的 SHA-1 的強(qiáng)抗碰撞性已于2005年被攻破, 也就是說,現(xiàn)在已經(jīng)能夠產(chǎn)生具備相同散列值的兩條不同的消 息。不過,SHA-2還尚未被攻破。
MD5輸出128位、SHA1輸出160位、SHA256輸出256位。
1、MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。
2、SHA1安全哈希算法(Secure Hash Algorithm)主要適用于數(shù)字簽名標(biāo)準(zhǔn) 里面定義的數(shù)字簽名算法。對(duì)于長度小于2^64位的消息,SHA1會(huì)產(chǎn)生一個(gè)160位的消息摘要。
3、sha256哈希值用作表示大量數(shù)據(jù)的固定大小的唯一值。數(shù)據(jù)的少量更改會(huì)在哈希值中產(chǎn)生不可預(yù)知的大量更改。SHA256 算法的哈希值大小為 256 位。
擴(kuò)展資料:
MD5應(yīng)用:
1、一致性驗(yàn)證
MD5的典型應(yīng)用是對(duì)一段信息產(chǎn)生信息摘要,以防止被篡改。具體來說文件的MD5值就像是這個(gè)文件的“數(shù)字指紋”。每個(gè)文件的MD5值是不同的,如果任何人對(duì)文件做了任何改動(dòng),其MD5值也就是對(duì)應(yīng)的“數(shù)字指紋”就會(huì)發(fā)生變化。
比如下載服務(wù)器針對(duì)一個(gè)文件預(yù)先提供一個(gè)MD5值,用戶下載完該文件后,用我這個(gè)算法重新計(jì)算下載文件的MD5值,通過比較這兩個(gè)值是否相同,就能判斷下載的文件是否出錯(cuò),或者說下載的文件是否被篡改了。
2、數(shù)字簽名
MD5的典型應(yīng)用是對(duì)一段Message(字節(jié)串)產(chǎn)生fingerprint(指紋),以防止被“篡改”。
例子:將一段話寫在一個(gè)叫 readme.txt文件中,并對(duì)這個(gè)readme.txt產(chǎn)生一個(gè)MD5的值并記錄在案,然后可以傳播這個(gè)文件給,如果修改了文件中的任何內(nèi)容,你對(duì)這個(gè)文件重新計(jì)算MD5時(shí)就會(huì)發(fā)現(xiàn)(兩個(gè)MD5值不相同)。
如果再有一個(gè)第三方的認(rèn)證機(jī)構(gòu),用MD5還可以防止文件作者的“抵賴”,這就是所謂的數(shù)字簽名應(yīng)用。
3、安全訪問認(rèn)證
MD5還廣泛用于操作系統(tǒng)的登陸認(rèn)證上,如Unix、各類BSD系統(tǒng)登錄密碼、數(shù)字簽名等諸多方面。如在Unix系統(tǒng)中用戶的密碼是以MD5(或其它類似的算法)經(jīng)Hash運(yùn)算后存儲(chǔ)在文件系統(tǒng)中。
當(dāng)用戶登錄的時(shí)候,系統(tǒng)把用戶輸入的密碼進(jìn)行MD5 Hash運(yùn)算,然后再去和保存在文件系統(tǒng)中的MD5值進(jìn)行比較,進(jìn)而確定輸入的密碼是否正確。
即使暴露源程序和算法描述,也無法將一個(gè)MD5的值變換回原始的字符串,從數(shù)學(xué)原理上說,是因?yàn)樵嫉淖址袩o窮多個(gè),這有點(diǎn)象不存在反函數(shù)的數(shù)學(xué)函數(shù)。
參考資料來源:百度百科-MD5
參考資料來源:百度百科-SHA1
參考資料來源:百度百科-sha256
1.安裝git
因?yàn)間olang是通過git來管理遠(yuǎn)程包的,所以我們首先要安裝git
git安裝比較簡單,直接下一步即可(在Windows Explorer integration選項(xiàng)中將“Git Bash here”和“Git GUI here”打?qū)?,需要了解具體安裝的可以看這里。
2.安裝Golang
1) 首先到選擇適合你系統(tǒng)的安裝包
2)我這里選擇的是:go1.4.2.windows-amd64.msi,下載完成安裝到指定目錄即可。我這里是(E:\Go)。
3)安裝完成后環(huán)境變量已經(jīng)自動(dòng)設(shè)置好了,可以呼出cmd命令行輸入命令查看
go env
可以看到,已經(jīng)出現(xiàn)go命令了。如果你的不能出現(xiàn),那可能是環(huán)境變量設(shè)置的問題。
進(jìn)入我的電腦-高級(jí)設(shè)置-環(huán)境變量查看下,GOROOT變量是否存在,以及Path變量中是否也設(shè)置了GOROOT。沒有的話,新增一個(gè)GOROOT變量,路徑則輸入你剛剛安裝完成后Go的根目錄,如我的是:E:\Go\。然后編輯Path變量,在最后面新增";%GOROOT%bin"。
4)go命令依賴一個(gè)環(huán)境變量:GOPATH,這不是Go的安裝目錄,而是你的工作(工程)目錄(你的代碼都會(huì)在該目錄下)。GOPATH可以有多個(gè),windows以分號(hào)(;)進(jìn)行區(qū)分,Linux系統(tǒng)是冒號(hào)(:),當(dāng)有多個(gè)GOPATH時(shí),默認(rèn)會(huì)將go get的內(nèi)容放在第一個(gè)目錄下。這里我們新建一個(gè)GOPATH變量,以我的為例:F:\mygo。
3.安裝Sublime Text3
注意:sublime是收費(fèi)軟件,不注冊(cè)也可以正常使用,只是保存次數(shù)達(dá)到一定的數(shù)量的時(shí)候會(huì)提示購買;忽略后可以正常使用。
這里需要安裝一個(gè)sublime的pakcage control功能,用于接下來安裝sublime插件。
1)在打開軟件后,按下快捷鍵 Ctrl+`,(`這個(gè)符號(hào)為英文半角模式下,按下 Tab 鍵上方、數(shù)字鍵1左邊的那個(gè)按鍵),此時(shí)會(huì)打開一個(gè)命令窗口,復(fù)制并輸入以下內(nèi)容,最后回車:
import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( '' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
2)重啟sublime之后,你就可以發(fā)現(xiàn)在 Preferences 這個(gè)菜單下出現(xiàn)了菜單項(xiàng) Package Control,如圖:
4. 安裝GoSublime插件
1)在sublime中,按住快捷鍵 shift + ctrl + p,在彈出框中輸入install package,如圖:
2)回車,會(huì)出現(xiàn)如下圖(可能需要稍微等待下,可以看sublime最下面的狀態(tài)):
3)輸入gosublime,回車(可能需要稍微等待下,可以看sublime最下面的狀態(tài)),如圖:
4)gosublime安裝完成后,Preferences - package settings - GoSublime - Settings - Uesrs需要配置下GOPATH,GOROOT,如圖:
5)在打開的窗口中輸入以下內(nèi)容,路徑請(qǐng)自行替換,ctrl+s保存。
{
"env": {
"GOPATH": "F:/mygo",
"GOROOT": "E:/Go"
}
}
6)重啟sublime,在GOPATH中的src新建一個(gè)hello.go文件,可以看到代碼自動(dòng)補(bǔ)全已經(jīng)出來了,:)
至此,sublime text3 + golang 安裝完成。
在編譯docker代碼之前肯定需要研究一下docker的代碼結(jié)構(gòu)以及官方推薦的方式,因?yàn)閐ocker是開源的,所以很多第三方開發(fā)者參與。那么官方肯定會(huì)給出開發(fā)環(huán)境搭建的文檔,所以拿到代碼肯定先研究官方的編譯方法。通過文檔和代碼了解到docker官方推薦的是在docker本身的容器里面搭建環(huán)境和編譯,官方給出的是一個(gè)基于ubuntu的dockerfile。不過正是這個(gè)dockerfile可以清楚的知道需要為了編譯準(zhǔn)備哪些依賴環(huán)境,為我們后面自己編譯提供了環(huán)境搭建的基礎(chǔ)。然后就嘗試了官方的編譯方案,結(jié)果各種網(wǎng)絡(luò)問題導(dǎo)致編譯通不過,當(dāng)然網(wǎng)上也有相應(yīng)的解決方案,基本上就是替換一些依賴源(國外的被墻了)。但是就算編譯通過了也只是一個(gè)基于ubuntu的二進(jìn)制文件,只能在ubuntu的相應(yīng)的系統(tǒng)上運(yùn)行。我們需要的是一個(gè)可以在centos7上運(yùn)行的二進(jìn)制文件,關(guān)鍵要搭建一個(gè)可以持續(xù)開發(fā)和編譯測試的環(huán)境。當(dāng)然也可以制作一個(gè)centos7的dockerfile文件,對(duì)照著官方的ubuntu的dockerfile也很簡單。但是這些都是還需要有一個(gè)前提,就是需要先安裝一個(gè)以前版本的docker來啟動(dòng)這個(gè)環(huán)境澀,好處也是杠杠的,可以在任何一臺(tái)能夠運(yùn)行docker的系統(tǒng)上進(jìn)行開發(fā)和測試,而且可以進(jìn)行持續(xù)集成。不過對(duì)于我們來說能夠編譯出一個(gè)穩(wěn)定運(yùn)行在centos7上的二進(jìn)制文件即可,所以就嘗試直接在本地進(jìn)行編譯,而不是通過docker的容器進(jìn)行。
經(jīng)過研究docker的官方編譯腳步,發(fā)現(xiàn)本地編譯也很簡單,只需要在docker源碼的目錄下執(zhí)行如下命令即可:
./hack/make.sh binary
上面這條命令就只會(huì)生成docker的二進(jìn)制文件,不過肯定不會(huì)這么順利的,執(zhí)行這個(gè)命令你就會(huì)發(fā)現(xiàn)錯(cuò)誤。如果第一次執(zhí)行報(bào)的錯(cuò)誤應(yīng)該是找不到相應(yīng)的go依賴包。那么現(xiàn)在就開始解決第一個(gè)問題,go依賴包。
解決go依賴包最直接的方法就一個(gè)一個(gè)去github或者其他地方去下載到本地,但是這樣做很麻煩,docker依賴的go語言包很多,然后依賴包可能又依賴其他包。這里有一個(gè)簡單實(shí)用的辦法,也是go語言管理項(xiàng)目的方便之處。通過go get命令來自動(dòng)下載,例如發(fā)現(xiàn)報(bào)錯(cuò)的是docker某一個(gè)目錄下的依賴包,那么可以如下執(zhí)行:
go get -v ./src/github點(diǎn)抗 /docker/docker/...
這條命令執(zhí)行以后整個(gè)docker目錄下源文件依賴的包都會(huì)被自動(dòng)下載。如果發(fā)現(xiàn)其他目錄下源文件也報(bào)同樣的錯(cuò)誤,可以按照次方法解決。不過這里需要強(qiáng)調(diào)一點(diǎn),這些下載都是會(huì)下載最新的包,如果編譯老的docker肯定會(huì)出問題,如果編譯最新的docker代碼肯定不會(huì)有問題,因?yàn)楣俜降木幾g是這種方式。
上面執(zhí)行的命令都是建立在go語言環(huán)境建立成功的基礎(chǔ)上,我安裝的go遇到是1.3.3版本的,采用源碼方式安裝。安裝在/export/servers/go下面,然后所有的go語言工程源碼目錄放在/export/servers/gopath。然后配置環(huán)境變量在用戶的根目錄下的.bashrc文件里面如下:
export GOPATH=/export/servers/gopath
export GOROOT=/export/servers/go
export GOARCH=amd64
export GOOS=linux
然后docker的代碼目錄如下:/export/servers/gopath/src/github點(diǎn)抗 /docker/docker。這樣才能在gopath下面進(jìn)行依賴包的下載。通過上面的方法把所有依賴包下載完以后就可以進(jìn)行編譯了。
在繼續(xù)編譯的過程中還會(huì)遇到缺少c語言依賴包缺少的問題,主要有三個(gè),(1)sqlite3;(2)device-mapper;(3)btrfs.
第一個(gè)sqlite3可以使用如下命令安裝依賴:yum install sqlite-devel.x86_64
第二個(gè)在官方的dockerfile文件里面有解決方案,執(zhí)行如下命令:
git clone --no-checkout /usr/local/lvm2 cd /usr/local/lvm2 git checkout -q v2_02_103
cd /usr/local/lvm2 ./configure --enable-static_link make device-mapper make install_device-mapper
第三個(gè)btrfs使用如下安裝依賴: yum install btrfs-progs。
這些依賴都解決了就繼續(xù)編譯,這個(gè)時(shí)候可能會(huì)出現(xiàn)ld連接錯(cuò)誤,提示找不到庫。因?yàn)閐ocker編譯的方式完全是static,所以所有依賴的庫必須還要有相應(yīng)的靜態(tài)庫(.a),而不是動(dòng)態(tài)庫(.so)。剛才通過yum install sqlite-devel.x86_64安裝了sqlite3的依賴,但是最后發(fā)現(xiàn)里面沒有靜態(tài)庫,所以編譯ld的時(shí)候出錯(cuò)了。我的解決辦法就是重新到sqlite3的官方網(wǎng)站下載了源碼包,然后編譯安裝即可。
編譯完成以后,就會(huì)在docker源碼目錄下的bundles/1.3.1/binary/目錄有如下文件:
docker docker-1.3.1 docker-1.3.1.md5 docker-1.3.1.sha256
docker-1.3.1這個(gè)文件就是我們需要的二進(jìn)制文件了,docker是一個(gè)軟連接到docker-1.3.1的文件。
到此就成功完成編譯了,以后修改了代碼重新支持編譯腳步即可:
./hack/make.sh binary
新聞名稱:go語言sha256 go語言上位機(jī)
本文路徑:http://jinyejixie.com/article24/ddiseje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站營銷、網(wǎng)站導(dǎo)航、服務(wù)器托管、域名注冊(cè)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)