賺錢好難啊7星評價
2020-09-21 21:18:09
比特幣并不是任何有形的硬幣,但也不是大家想象的能夠把比特幣從整個系統(tǒng)中分離出來的一段數(shù)據(jù)。
比特幣的本質(zhì)其實就是一堆復(fù)雜算法所生成的特解。特解是指方程組所能得到無限個(其實比特幣是有限個)解中的一組。而每一個特解都能解開方程并且是唯一的。 以人民幣來比喻的話,比特幣就是人民幣的序列號,你知道了某張鈔票上的序列號,你就擁有了這張鈔票。如何保證手里的序列號是唯一的,而且不會被復(fù)制呢?
這就要了解比特幣的核心算法:SHA256算法!
SHA256是SHA-2下細(xì)分出的一種算法。SHA-2,名稱來自于安全散列算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼散列函數(shù)算法標(biāo)準(zhǔn),由美國國家安全局研發(fā),屬于SHA算法之一,是SHA-1的后繼者。SHA256就是一個哈希函數(shù)。
哈希函數(shù),又稱散列算法,是一種從任何一種數(shù)據(jù)中創(chuàng)建小的數(shù)字“指紋”的方法。散列函數(shù)把消息或數(shù)據(jù)壓縮成摘要,使得數(shù)據(jù)量變小,將數(shù)據(jù)的格式固定下來。該函數(shù)將數(shù)據(jù)打亂混合,重新創(chuàng)建一個叫做散列值(或哈希值)的指紋。散列值通常用一個短的隨機(jī)字母和數(shù)字組成的字符串來代表。
對于任意長度的消息,SHA256都會產(chǎn)生一個256bit長的哈希值,稱作消息摘要,這個摘要相當(dāng)于是個長度為32個字節(jié)的數(shù)組,通常用一個長度為64的十六進(jìn)制字符串來表示。
哈希函數(shù)有哪些特征呢?
傳統(tǒng)的加密方法是不能公開的,因為知道了加密方法也就知道了解密方法,只需要反向計算就能解密。有沒有一種加密算法,即使知道了加密方法,也不能恢復(fù)出原文呢?這種算法的原理是,在加密過程中加入一些不可逆的運算來實現(xiàn)。
比如說:需要加密的數(shù)字 M,采用下面的加密規(guī)則進(jìn)行加密。
1. 將M 加上 123456;
2. 把結(jié)果平方,取第 3 - 10 位,組成一個8位數(shù)字;
3. 將這個數(shù)字除以456789 求余數(shù);
得到的數(shù)字就是加密之后的結(jié)果。
在密碼學(xué)上,這種會丟掉一部分信息的加密方式被稱為“單向加密”,也叫哈希算法。一個可靠的哈希算法至少需要滿足下面幾個基本條件:
第一,對于給定的數(shù)據(jù)M,很容易算錯哈希值X = F(M);
第二,根據(jù)X 很難算出M;
第三,很難找到M 和 N使得 F(M) = F(N)。
真實世界的哈希算法原理和上面類似,但也更為復(fù)雜。目前被廣泛使用的哈希算法包括MD5以及SHA-256算法。哈希算法的結(jié)果長度都是固定的,比如:MD5 的結(jié)果長度是32個字符,而SHA-256 的是64個字符。所以,后者的算法強(qiáng)度比前者的要強(qiáng),也就更安全。假設(shè)我們要對“WoYaoJiaMi”進(jìn)行加密,MD5 算法的結(jié)果是:“3832EE29D065861A9C006BEDA8C63D3C”,而SHA-256 的結(jié)果是: “3C56D7479A96942B9D96D4D1AF24F8F8566EBD30B393B40099F43A48F093B7C9”。
哈希算法是非對稱加密算法,在真實應(yīng)用的時候,有一個缺陷就是密碼傳輸?shù)谋C軉栴}。需要即使有人拿到了密碼也沒法解密,還需要知道另外一個密碼才可以解密。前一個密碼稱之為公鑰,后一個密碼稱之為私鑰,只要私鑰不丟,任何人都無法竊取或者篡改數(shù)據(jù)。這種密碼系統(tǒng),加密和解密使用不同的密碼,公鑰用來加密并且是可以公開的,解密使用密鑰進(jìn)行加密。
酸菜丶小子5星評價
2020-09-11 21:19:24
在比特幣系統(tǒng)里有一個比較重要的加密算法,這就是SHA256算法。
SHA256的中文全稱叫做“安全哈希算法”。所謂的“哈?!笔荋ash的音譯,而Hash就是進(jìn)行Hash函數(shù)的意思。通常來說,Hash函數(shù)的運算有一個共同特點。就是不論原始數(shù)據(jù)有多少位,只要通過Hash運算后,得到結(jié)果的長度都是固定的。
概念往往是抽象的,那么下面我們就用一個形象的例子進(jìn)行說明。如果我們?nèi)D書館借書,就會發(fā)現(xiàn)不管是什么圖書,書的側(cè)面都會貼著一張便簽,便簽上通常都有一個與圖書對應(yīng)的編號。為了方便管理,這些編號的長度通常都是一樣的。這個情況和Hash函數(shù)就非常類似。我們可以把輸入Hash函數(shù)之前的數(shù)據(jù)看作是書本,這些書本的字?jǐn)?shù)都不一樣,有的有幾萬字,有的有幾十萬字。但是一旦這些數(shù)據(jù)通過Hash函數(shù)處理過以后,就全部都變成長度相同的編號了。而且這些編碼必須要滿足以下幾點要求:
第一、輸入Hash函數(shù)之前的數(shù)據(jù)和通過Hash函數(shù)處理過后得到的編號必須一一對應(yīng)。
第二、每一個編號的長度都是固定的。
第三、我們無法通過編號倒推出數(shù)據(jù)的內(nèi)容。
Hash函數(shù)的類型有很多種,包括SHA224、SHA256、SHA384、SHA512、SHA512/224、SHA512/256等。但是比特幣僅選用了SHA256。這個256代表的意思是,數(shù)據(jù)經(jīng)過函數(shù)運算后得到的結(jié)果必須是一個256位的2進(jìn)制數(shù)字。也就是類似這樣的結(jié)果:“001100……11011”,這其中一共有256位。
在比特幣里,為什么要把數(shù)據(jù)轉(zhuǎn)換成256位的數(shù)字呢?其實之所以選擇SHA256,主要是為了驗證兩個文件是否相等。
比如:有一個商業(yè)間諜獲得了一份重要的商業(yè)報告。但是這個間諜害怕這份商業(yè)報告在網(wǎng)上傳遞的過程中被別人截獲并進(jìn)行修改。于是就把這份商業(yè)機(jī)密進(jìn)行了處理,通過SHA256運算,生成了一個數(shù)值,我們暫且稱這個數(shù)值為A1。
然后這位間諜就把這份商業(yè)報告和A1通過電子郵箱傳遞了出去,并在郵件里注明了:“為了避免其他人對商業(yè)報告進(jìn)行修改,報告下載完成后,請大家對報告做一次SHA256運算,然后看看這個計算結(jié)果和A1是否相符。如果和A1完全一致,那么就意味著這份商業(yè)報告沒有被其他人動過手腳。如果和A1不同,那么就說明你下載的報告很可能被別人篡改過。”
中本聰在設(shè)計比特幣的時候之所以選擇SHA256,主要是看中了SHA256在驗證改動方面有著巨大的優(yōu)勢。因為只要輸入數(shù)據(jù)有微小的區(qū)別,通過SHA256計算出來的數(shù)值都會有巨大的差距。
比如下面這三句話,原文雖然有微小的不同,但是通過Hash函數(shù)處理,就會讓SHA256值產(chǎn)生巨大的差異,而且這種差異是毫無規(guī)律可循的。
原文1:動靜不失,人所易明。
S1: 284c4ddd2e5ef97924cc70e90cd02fd792e3fd62
原文3:動靜不失,人所易明
S2:991780940ced6e6f910013f2ba2ac732e23601ef
原文3:動靜不失人所易明
S2:62e07ce4d7d529a6268841d521bf882d3b385199
SHA安全加密標(biāo)準(zhǔn),是至今國際上使用最為廣泛的較為安全的壓縮算法之一,由美國NIST和NSA兩個組織共同開發(fā)。此算法于1993年5月11日被美國NIST和NSA設(shè)定為加密標(biāo)準(zhǔn)。