資料完整性完整性是指在傳輸、儲存資訊或資料的過程中,確保資訊或資料不被未授權的篡改或在篡改後能夠被迅速發現。許多開放的系統應用都有依賴於資料完整性的安全需求。
雜湊函式hash
實現資料的完整性保護可以採用雜湊函式hash演算法
雜湊函式(英語:hash function)又稱雜湊演算法、雜湊函式,是一種從任何一種資料中建立小的數字「指紋」的方法。雜湊函式把訊息或資料壓縮成摘要,使得資料量變小,將資料的格式固定下來。該函式將資料打亂混合,重新建立乙個叫做雜湊值(hash values,hash codes,hash sums,或hashes)的指紋。雜湊值通常用乙個短的隨機字母和數字組成的字串來代表。它可以確保傳遞真實的資訊 。訊息或資料的接受者確認訊息是否被篡改的性質叫資料的真實性,也稱為完整性。發信人通過將原訊息和雜湊值一起傳送,可以保證真實性。常見的演算法有 md5、sha-1、sha256等,該類函式特點是函式單向不可逆、對輸入非常敏感、輸出長度固定,針對資料的任何修改都會改變雜湊函式的結果,用於防止資訊篡改並驗證資料完整性。下面我們就來了解一下md5、sha-1和sha-256演算法吧!
md5演算法
md5演算法的原理可簡要的敘述為:md5碼以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成乙個128位雜湊值。演算法步驟如下所示:
(1)填充
填充訊息使填充後的長度恰好為乙個比512的倍數小64的位數。填充方法是附乙個「1」在訊息後面,再補多個「0」。然後,在其後附上64位元的訊息長度(填充前)的二進位制表示。這兩部的作用是使最後填充的訊息恰好是512位元的整數倍長,同時確保不同的訊息在填充後不會相同。
摘要生成主要是進行演算法的主迴圈。將上面四個變數複製到另外的變數中:a 到 aa,b 到 bb,c 到 cc,d 到 dd。主迴圈有四輪,它們都很相似。每一輪由 16 次操作組成。簡單來說,首先會進行非線性函式計算,再進行輪運算。上述操作完成後將 a,b,c 和 d 分別加上 aa,bb,cc 和 dd,然 後進行下一步資料繼續進行演算法,最後的輸出是 a,b,c 和 d 的級聯。
sha-1演算法
(1)填充
對於給定的訊息進行填充,使填充後的長度為512bits的整數倍,填充方法與md5的一樣。
(2)初始化緩衝區
hash函式的中間結果和最終結果儲存在160位的緩衝區中,緩衝區由5個32位的暫存器(a、b、c、d、e)組成,對其進行初始化為32位的整數(十六進製制):
a:67452301
b:efcdab89
c:98badcfe
d:10325476
e:c3d2e1f0
(3)摘要生成
主迴圈有四輪,每輪 20 次操作(md5 有四輪,每輪 16 次操作)。每次操作對 a,b,c,d 和 e 中的 3 個做一次非線性函式運算,然後進行與 md5 類似的移位運算和加運算。再用演算法將訊息塊從 16 個 32bits 子塊變成 80 個 32bits 子塊。80個子塊分組進行4輪運算。之後鏈結變數與初始鏈結變數進行求和運算。鏈結變數作為下乙個明文分組的輸入重複進行以上操作。最後,5個鏈結變數裡面的資料就是sha-1級聯。
sha-256演算法
對於任意長度的訊息,sha-256都會產生乙個256位的雜湊值,稱為訊息摘要。這個摘要相當於四個長度為32位元組的陣列,通常有乙個長度為64位的十六進製制字串來表示。總體上,sha-256與md5以及sha-1等雜湊函式的操作流程類似。
首先會對訊息進行填充,使得最終長度為512位的倍數。然後
go生成不重複的純數字6位的隨機數
最近在學go,按照入門指南學完go的基礎語法,開始學習go的標準庫 借用生成這個小任務複習一下go的基礎語法.推薦go入門指南,package main import fmt math rand sync func main len 長度 max 個數 隨機生成長度為len的max個純數字隨機數 f...
生成不重複12位隨機字串
1.生成乙個12位隨機不重複純數字字串 public static string couponcode return first string.format 010d rnd 2.生成乙個以自定義字串開頭的不重複隨機字串 public static string couponcode string ...
生成4位不重複的字串
實際的業務場景中需要生成4位不重複的字串,這個場景比較特殊,不具有普遍性,正常場景的唯一單號都不會只有4位。最先想到的是隨機生成4位字串,字元包括數字 大小寫字母一共62位,基本可以滿足使用要求,但是越到後面,重複的概率就會越大。想要保證不重複,可以加入時間戳,機器id等,類似雪花演算法的思路,但是...