獲取 md5 摘要

詳見代碼...

/**
md5 hash
**/

package main

import (
    "crypto/md5"
    "fmt"
    "encoding/hex"
    "io"
    "reflect"
)


// 方法一
func md5V1(str string) {

    bytes := []byte(str)

    // 創(chuàng)建 md5 對象
    hash := md5.New()

    // 也可以增加一個 key,和 key 一起使用 md5 計算摘要榨惠。加鹽
    // func NewMD5(key []byte) hash.Hash

    // 將要計算的字符串以 byte 數(shù)組的形式寫入對象中
    hash.Write(bytes)
    // 獲取摘要結果忘衍,返回一個 []byte 類型
    hashValue := hash.Sum(nil)

    // []uint8(unit8即byte)
    fmt.Println(reflect.TypeOf(hashValue).String())

    // [177 148 106 201 36 146 210 52 124 98 53 180 210 97 17 132]
    fmt.Println(hashValue);

    // 通常以 ASCII 形式輸 出四個由 4 字節(jié)組成的十六進制數(shù)
    hashSzie := hash.Size()
    for i := 0; i < hashSzie; i += 4 {
        var val uint32
                // 比低位高 3 字節(jié)紧阔,*pow(2,3*8)
        val = uint32(hashValue[i]) << 24 +
                // 比低位高 2 字節(jié),*pow(2,2*8)
                uint32(hashValue[i + 1]) << 16 +
                // // 比低位高 1 字節(jié)吭净,*pow(2,1*8)
                uint32(hashValue[i + 2]) << 8 +
                uint32(hashValue[i + 3])
        fmt.Printf("%x", val)
    }
    fmt.Println()

    // 上述轉換過程可以使用 hex.EncodeToString
    fmt.Println(hex.EncodeToString(hashValue))

    // 其實直接使用 %x 格式化輸出也是一樣的
    fmt.Printf("%x\n", hashValue)

    // 也可以通過 fmt 寫入 string 字符串
    md5Str := fmt.Sprintf("%x", hashValue)

    fmt.Println(md5Str)

    fmt.Println("==================")
}


// 方法二
func md5V2(str string) {
    bytes := []byte(str)

    // 該方法寫起來較方法一,三方便
    // 返回的 [16]byte 類型,區(qū)別于方法一和方法三中的 []byte
    hashValue := md5.Sum(bytes)

    // [16]uint8(unit8即byte)
    fmt.Println(reflect.TypeOf(hashValue).String())

    fmt.Printf("%x\n", hashValue)

    fmt.Println("==================")
}


// 方法三
func md5V3(str string) {
    hash := md5.New()

    // 和方法一的區(qū)別就是此處使用的 io.WriteString 將字符串寫入 hash
    // 而方法一使用的 md5.Write 將字符串寫入 hash 中
    io.WriteString(hash, str)

    hashValue := hash.Sum(nil)

    // []uint8(unit8即byte)
    fmt.Println(reflect.TypeOf(hashValue).String())

    fmt.Printf("%x\n", hashValue)

    fmt.Println("==================")
}


func main() {
    str := "hello\n";
    md5V1(str)
    md5V2(str)
    md5V3(str)
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末坯辩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子崩侠,更是在濱河造成了極大的恐慌漆魔,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件却音,死亡現(xiàn)場離奇詭異改抡,居然都是意外死亡,警方通過查閱死者的電腦和手機系瓢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門阿纤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人八拱,你說我怎么就攤上這事阵赠。” “怎么了肌稻?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵清蚀,是天一觀的道長。 經常有香客問我爹谭,道長枷邪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任诺凡,我火速辦了婚禮东揣,結果婚禮上,老公的妹妹穿的比我還像新娘腹泌。我一直安慰自己嘶卧,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布凉袱。 她就那樣靜靜地躺著芥吟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪专甩。 梳的紋絲不亂的頭發(fā)上钟鸵,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音涤躲,去河邊找鬼棺耍。 笑死,一個胖子當著我的面吹牛种樱,可吹牛的內容都是我干的蒙袍。 我是一名探鬼主播俊卤,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼左敌!你這毒婦竟也來了瘾蛋?” 一聲冷哼從身側響起俐镐,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤矫限,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佩抹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叼风,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年棍苹,在試婚紗的時候發(fā)現(xiàn)自己被綠了无宿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡枢里,死狀恐怖孽鸡,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情栏豺,我是刑警寧澤彬碱,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站奥洼,受9級特大地震影響巷疼,放射性物質發(fā)生泄漏。R本人自食惡果不足惜灵奖,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一嚼沿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓷患,春花似錦骡尽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沙咏,卻和暖如春辨图,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肢藐。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工故河, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吆豹。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓鱼的,卻偏偏與公主長得像理盆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凑阶,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容