最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Go語(yǔ)言開(kāi)發(fā)一個(gè)編解碼工具

 更新時(shí)間:2025年03月05日 09:42:14   作者:竹等寒  
這篇文章主要為大家詳細(xì)介紹了如何基于Go語(yǔ)言開(kāi)發(fā)一個(gè)編解碼工具,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下

開(kāi)啟一個(gè)項(xiàng)目

這作為補(bǔ)充內(nèi)容,可忽略直接看下面的編解碼:

一開(kāi)始用就按照下面的步驟即可

1.創(chuàng)建一個(gè)文件夾,你自己定義名字(建議只用英文名字),你的項(xiàng)目文件夾

2.在這個(gè)文件夾里創(chuàng)建一個(gè)main.go

然后在該文件夾目錄執(zhí)行終端命令

go mod init 輸入你的文件夾名字(說(shuō)白了就是你的項(xiàng)目名字)
go mod download  //檢查一下是否有沒(méi)有下載的模塊,這個(gè)我比較少用
go get -u 你的模塊 //這里是下載你需要的對(duì)應(yīng)模塊
go mod tidy //可以將下載好的但是在你這項(xiàng)目中還沒(méi)導(dǎo)入的模塊進(jìn)行導(dǎo)入使用,否則會(huì)報(bào)錯(cuò)

到這里基本就可以寫(xiě)代碼了,如果有的模塊還錯(cuò)誤一般就是沒(méi)有執(zhí)行g(shù)o mod tidy

編解碼工具開(kāi)發(fā)

編解碼在安全開(kāi)發(fā)中肯定是必要的一個(gè)功能,通過(guò)編解碼嘗到開(kāi)發(fā)甜頭的同時(shí)也能夠?yàn)楹罄m(xù)開(kāi)發(fā)打下基礎(chǔ)。

Dongle包

這個(gè)包就是比較經(jīng)典的一個(gè)編解碼包,下面做一個(gè)簡(jiǎn)單的介紹如何使用

encode / decode

要使用這個(gè)包就需要下載一下,下面提供兩個(gè)途徑,一個(gè)國(guó)外一個(gè)國(guó)內(nèi)

只需要下載一個(gè),不建議下載兩個(gè),不知道會(huì)不會(huì)發(fā)生沖突

//github下載
go get -u github.com/golang-module/dongle


//國(guó)內(nèi)gitee下載
go get -u gitee.com/golang-module/dongle

Base64編解碼

格式:

dongle.Encode.From來(lái)源.By編碼類型.ToString轉(zhuǎn)字符

dongle.Decode.From來(lái)源.By編碼類型.ToString轉(zhuǎn)字符

package main
import (
    "fmt"
    "github.com/dromara/dongle"
)
  func baseTest() {
    fmt.Println("==========Base64==========")
    baseStr := dongle.Encode.FromString("666").ByBase64().ToString()
    fmt.Println(baseStr)
    rawStr := dongle.Decode.FromString(baseStr).ByBase64().ToString()
    fmt.Println(rawStr)
}
func main() {
    baseTest()
}

其他的可以自行操作,也就是說(shuō)現(xiàn)在具備了寫(xiě)一個(gè)base全家桶編解碼工具的能力了

接下來(lái)就是非常基本的代碼了,下面附上以便以后方便使用

摩斯密碼

以后我們寫(xiě)好的功能都可以用函數(shù)封裝起來(lái),以后寫(xiě)工具功能的時(shí)候直接拿來(lái)就用了,當(dāng)然下面的我只是作為一個(gè)test測(cè)試函數(shù)。

func moreTest() {
    fmt.Println("==========More==========")
    morseStr := dongle.Encode.FromString("666").ByMorse().ToString()
    fmt.Println(morseStr)
    rawStr := dongle.Decode.FromString(morseStr).ByMorse().ToString()
    fmt.Println(rawStr)
}

URL加解密

參考代碼

func urlTest() {
    fmt.Println("==========URL==========")
    urlStr := dongle.Encode.FromString("hack=123").BySafeURL().ToString()
    fmt.Println("加密后的url數(shù)據(jù):", urlStr)
    rawStr := dongle.Decode.FromString(urlStr).BySafeURL().ToString()
    fmt.Println("解密后的url數(shù)據(jù):", rawStr)
}

AES加解密

AES 加密有模式,所以要設(shè)置一個(gè)模式填充方式

完整代碼

func aesTest() {
    fmt.Println("==========AES==========")
    aesCipher := dongle.NewCipher()
    aesCipher.SetMode(dongle.CBC)        //CBC、CFB、OFB、CTR、ECB
    aesCipher.SetPadding(dongle.Zero)    //No、Empty、Zero、PKCS5、PKCS7、AnsiX923、  ISO97971
    aesCipher.SetKey("1234567890123456") // key?度可以是16、24或32字節(jié)
    aesCipher.SetIV("1234567890123456")  // iv長(zhǎng)度固定為16字節(jié),ECB模式下不需要設(shè)置iv,這里看情況用就行了,只是做一個(gè)演示
    aesStr := dongle.Encrypt.FromString("hack").ByAes(aesCipher).ToRawString()
    fmt.Println("加密后的數(shù)據(jù):", aesStr)
    rawStr := dongle.Decrypt.FromRawString(aesStr).ByAes(aesCipher).ToString()
    fmt.Println("解密后的數(shù)據(jù):", rawStr)
}

當(dāng)然如果你覺(jué)得亂碼看著不舒服,還能換不同的輸出,這里簡(jiǎn)單過(guò)一遍,知道即可

func aesTest() {
    fmt.Println("==========AES==========")
    aesCipher := dongle.NewCipher()
    aesCipher.SetMode(dongle.CBC)        //CBC、CFB、OFB、CTR、ECB
    aesCipher.SetPadding(dongle.Zero)    //No、Empty、Zero、PKCS5、PKCS7、AnsiX923、  ISO97971
    aesCipher.SetKey("1234567890123456") // key?度可以是16、24或32字節(jié)
    aesCipher.SetIV("1234567890123456")  // iv長(zhǎng)度固定為16字節(jié),ECB模式下不需要設(shè)置iv,這里看情況用就行了,只是做一個(gè)演示
    aesStr := dongle.Encrypt.FromString("hack").ByAes(aesCipher).ToRawString()
    fmt.Println("加密后的raw數(shù)據(jù):", aesStr)
    rawStr := dongle.Decrypt.FromRawString(aesStr).ByAes(aesCipher).ToString()
    fmt.Println("解密后的raw數(shù)據(jù):", rawStr)
    aesStr = dongle.Encrypt.FromString("hack").ByAes(aesCipher).ToBase64String()
    fmt.Println("加密后的base64數(shù)據(jù):", aesStr)
    rawStr = dongle.Decrypt.FromBase64String(aesStr).ByAes(aesCipher).ToString()
    fmt.Println("解密后的base64數(shù)據(jù):", rawStr)
    aesStr = dongle.Encrypt.FromString("hack").ByAes(aesCipher).ToHexString()
    fmt.Println("加密后的hex數(shù)據(jù):", aesStr)
    rawStr = dongle.Decrypt.FromHexString(aesStr).ByAes(aesCipher).ToString()
    fmt.Println("解密后的hex數(shù)據(jù):", rawStr)
}

MD5碰撞工具開(kāi)發(fā)

需求:能夠根據(jù)一個(gè)密碼本對(duì)某個(gè)md5值進(jìn)行碰撞解密

思路:就是打開(kāi)文件讀取每一行,加密然后碰撞比較md5值是否正確

比如我們輸入top2k字典中最后一個(gè)密碼作為md5值

參考代碼:(注意我加了一個(gè)時(shí)間計(jì)算,那個(gè)是可以不要的,我只是想看下計(jì)算時(shí)間有多長(zhǎng)罷遼)

func fuzzMd5(md5str string) {
    open, err := os.Open("top2k.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer open.Close()
    scanner := bufio.NewScanner(open)
    // 逐個(gè)讀取分割后的內(nèi)容
    start := time.Now() // 獲取當(dāng)前時(shí)間
    for scanner.Scan() {
        passwd := scanner.Text()
        passwdMD5 := dongle.Encrypt.FromString(passwd).ByMd5().ToHexString()
        if string(passwdMD5) == md5str {
            fmt.Printf("%v:%v\n", passwdMD5, passwd)
            end := time.Now() // 獲取當(dāng)前時(shí)間
            fmt.Println("耗時(shí):", end.Sub(start).Seconds())
            return
        }
    }
    end := time.Now() // 獲取當(dāng)前時(shí)間
    fmt.Println("耗時(shí):", end.Sub(start).Seconds())
    if err := scanner.Err(); err != nil {
        fmt.Println("Error:", err)
    }
}

main函數(shù)調(diào)用如下

運(yùn)行結(jié)果如下:

這就是一個(gè)簡(jiǎn)單的md5碰撞工具了,目前所學(xué)知識(shí)還只能做到這樣比較簡(jiǎn)陋,后面兩期打算講一個(gè)腳手架開(kāi)發(fā)工具,加速開(kāi)發(fā)的同時(shí),可以讓你自己寫(xiě)的命令行工具看起來(lái)就是一個(gè)完整的hacker工具了。

以上就是基于Go語(yǔ)言開(kāi)發(fā)一個(gè)編解碼工具的詳細(xì)內(nèi)容,更多關(guān)于Go編解碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)事務(wù)的提交與回滾

    golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)事務(wù)的提交與回滾

    這篇文章主要介紹了golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)事務(wù)的提交與回滾,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Golang使用archive/zip包實(shí)現(xiàn)ZIP壓縮與解壓

    Golang使用archive/zip包實(shí)現(xiàn)ZIP壓縮與解壓

    Golang?中的?archive/zip?包用于處理?ZIP?格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮?ZIP?格式文件的函數(shù)和類型,使用起來(lái)非常方便,下面就跟隨小編一起了解一下具體使用方法吧
    2023-08-08
  • 關(guān)于Gin框架中的Cookie和Session的使用方法

    關(guān)于Gin框架中的Cookie和Session的使用方法

    為了實(shí)現(xiàn)跨請(qǐng)求的數(shù)據(jù)共享,我們可以使用Cookie和Session,本文將結(jié)合實(shí)際案例,詳細(xì)介紹在Go語(yǔ)言的Gin框架中如何使用Cookie和Session,并通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • goweb原生實(shí)現(xiàn)HTTP文件上傳功能

    goweb原生實(shí)現(xiàn)HTTP文件上傳功能

    在Go語(yǔ)言中,使用原生net/http包實(shí)現(xiàn)HTTP文件上傳功能,主要依賴multipart/form-data編碼解析和文件流處理, 下面就來(lái)詳細(xì)的介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下
    2026-02-02
  • Go語(yǔ)言中的包Package詳解

    Go語(yǔ)言中的包Package詳解

    本文詳細(xì)講解了Go語(yǔ)言中的包Package,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Go語(yǔ)言leetcode題解953驗(yàn)證外星語(yǔ)詞典示例詳解

    Go語(yǔ)言leetcode題解953驗(yàn)證外星語(yǔ)詞典示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言leetcode題解953驗(yàn)證外星語(yǔ)詞典示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • GPT回答 go語(yǔ)言和C語(yǔ)言數(shù)組操作對(duì)比

    GPT回答 go語(yǔ)言和C語(yǔ)言數(shù)組操作對(duì)比

    這篇文章主要為大家介紹了GPT回答的go語(yǔ)言和C語(yǔ)言數(shù)組操作方法對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • golang實(shí)現(xiàn)讀取excel數(shù)據(jù)并導(dǎo)入數(shù)據(jù)庫(kù)

    golang實(shí)現(xiàn)讀取excel數(shù)據(jù)并導(dǎo)入數(shù)據(jù)庫(kù)

    Go 語(yǔ)言是一門(mén)適合用于編寫(xiě)高效且并發(fā)的 Web 應(yīng)用程序的編程語(yǔ)言,同時(shí)也可以使用它進(jìn)行數(shù)據(jù)處理和分析,本文主要介紹了如何通過(guò)go語(yǔ)言實(shí)現(xiàn)讀取excel數(shù)據(jù)并導(dǎo)入數(shù)據(jù)庫(kù),感興趣的小伙伴可以了解下
    2025-04-04
  • Go進(jìn)階并發(fā)控制channel和WaitGroup的實(shí)現(xiàn)

    Go進(jìn)階并發(fā)控制channel和WaitGroup的實(shí)現(xiàn)

    本篇文章詳細(xì)介紹了Go語(yǔ)言中的channel、WaitGroup和信號(hào)量三種并發(fā)控制機(jī)制,分別從實(shí)現(xiàn)原理、使用示例和優(yōu)缺點(diǎn)等方面進(jìn)行了深入解析,幫助開(kāi)發(fā)者更好地掌握Go語(yǔ)言的并發(fā)編程技巧
    2026-06-06
  • Go 日志封裝實(shí)戰(zhàn)示例詳解

    Go 日志封裝實(shí)戰(zhàn)示例詳解

    這篇文章主要為大家介紹了Go 日志封裝實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論

山东| 高雄市| 双鸭山市| 武义县| 汶上县| 凤凰县| 舒兰市| 广安市| 石首市| 女性| 湘阴县| 祁阳县| 镇原县| 赣州市| 襄垣县| 宁都县| 武功县| 翁牛特旗| 昭平县| 西乌珠穆沁旗| 松江区| 济源市| 东城区| 淄博市| 旬邑县| 屏边| 佳木斯市| 周口市| 酒泉市| 扎囊县| 大同市| 池州市| 永兴县| 濮阳市| 灵宝市| 平度市| 昌邑市| 甘洛县| 罗田县| 鄄城县| 云梦县|