Go紅隊開發—編解碼工具

文章目錄

  • 開啟一個項目
  • 編解碼工具開發
    • Dongle包
      • Base64編解碼
      • 摩斯密碼
      • URL加解密
      • AES加解密
    • MD5碰撞工具開發

開啟一個項目

這作為補充內容,可忽略直接看下面的編解碼:
一開始用就按照下面的步驟即可

  • 1.創建一個文件夾,你自己定義名字(建議只用英文名字),你的項目文件夾
  • 2.在這個文件夾里創建一個main.go
  • 然后在該文件夾目錄執行終端命令
go mod init 輸入你的文件夾名字(說白了就是你的項目名字)
go mod download  //檢查一下是否有沒有下載的模塊,這個我比較少用
go get -u 你的模塊 //這里是下載你需要的對應模塊
go mod tidy //可以將下載好的但是在你這項目中還沒導入的模塊進行導入使用,否則會報錯到這里基本就可以寫代碼了,如果有的模塊還錯誤一般就是沒有執行go mod tidy

編解碼工具開發

編解碼在安全開發中肯定是必要的一個功能,通過編解碼嘗到開發甜頭的同時也能夠為后續開發打下基礎。

Dongle包

這個包就是比較經典的一個編解碼包,下面做一個簡單的介紹如何使用

encode / decode

要使用這個包就需要下載一下,下面提供兩個途徑,一個國外一個國內
只需要下載一個,不建議下載兩個,不知道會不會發生沖突

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

Base64編解碼

格式:
dongle.Encode.From來源.By編碼類型.ToString轉字符
dongle.Decode.From來源.By編碼類型.ToString轉字符

package mainimport ("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()}

其他的可以自行操作,也就是說現在具備了寫一個base全家桶編解碼工具的能力了


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

摩斯密碼

以后我們寫好的功能都可以用函數封裝起來,以后寫工具功能的時候直接拿來就用了,當然下面的我只是作為一個test測試函數。

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數據:", urlStr)rawStr := dongle.Decode.FromString(urlStr).BySafeURL().ToString()fmt.Println("解密后的url數據:", rawStr)}

AES加解密

AES 加密有模式,所以要設置一個模式填充方式

完整代碼

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

當然如果你覺得亂碼看著不舒服,還能換不同的輸出,這里簡單過一遍,知道即可

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

MD5碰撞工具開發

需求:能夠根據一個密碼本對某個md5值進行碰撞解密
思路:就是打開文件讀取每一行,加密然后碰撞比較md5值是否正確
比如我們輸入top2k字典中最后一個密碼作為md5值


參考代碼:(注意我加了一個時間計算,那個是可以不要的,我只是想看下計算時間有多長罷遼)

func fuzzMd5(md5str string) {open, err := os.Open("top2k.txt")if err != nil {fmt.Println(err)return}defer open.Close()scanner := bufio.NewScanner(open)// 逐個讀取分割后的內容start := time.Now() // 獲取當前時間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() // 獲取當前時間fmt.Println("耗時:", end.Sub(start).Seconds())return}}end := time.Now() // 獲取當前時間fmt.Println("耗時:", end.Sub(start).Seconds())if err := scanner.Err(); err != nil {fmt.Println("Error:", err)}}

main函數調用如下

運行結果如下:

這就是一個簡單的md5碰撞工具了,目前所學知識還只能做到這樣比較簡陋,后面兩期打算講一個腳手架開發工具,加速開發的同時,可以讓你自己寫的命令行工具看起來就是一個完整的hacker工具了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71162.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Starrocks入門(二)

1、背景:考慮到Starrocks入門這篇文章,安裝的是3.0.1版本的SR,參考:Starrocks入門-CSDN博客 但是官網的文檔,沒有對應3.0.x版本的資料,卻有3.2或者3.3或者3.4或者3.1或者2.5版本的資料,不要用較…

工程化與框架系列(10)--微前端架構

微前端架構 🏗? 微前端是一種將前端應用分解成更小、更易管理的獨立部分的架構模式。本文將詳細介紹微前端的核心概念、實現方案和最佳實踐。 微前端概述 🌟 💡 小知識:微前端的核心理念是將前端應用分解成一系列獨立部署、松耦…

SwiftUI之狀態管理全解析

文章目錄 引言一、`@State`1.1 基本概念1.2 初始化與默認值1.3 注意事項二、`@Binding`2.1 基本概念2.2 初始化與使用2.3 注意事項三、`@ObservedObject`3.1 基本概念3.2 初始化與使用3.3 注意事項四、`@EnvironmentObject`4.1 基本概念4.2 初始化與使用4.3 注意事項五、`@Stat…

Redis 高可用性:如何讓你的緩存一直在線,穩定運行?

🎯 引言:Redis的高可用性為啥這么重要? 在現代高可用系統中,Redis 是一款不可或缺的分布式緩存與數據庫系統。無論是提升訪問速度,還是實現數據的高效持久化,Redis 都能輕松搞定。可是,當你把 …

面試題:說一下你對DDD的了解?

面試題:說一下你對DDD的了解? 在面試中,關于 DDD(領域驅動設計,Domain-Driven Design) 的問題是一個常見的技術考察點。DDD 是一種軟件設計方法論,旨在通過深入理解業務領域來構建復雜的軟件系統。以下是一個清晰、詳細的回答模板,幫助你在面試中脫穎而出: DDD 的定義…

Redis---緩存穿透,雪崩,擊穿

文章目錄 緩存穿透什么是緩存穿透?緩存穿透情況的處理流程是怎樣的?緩存穿透的解決辦法緩存無效 key布隆過濾器 緩存雪崩什么是緩存雪崩?緩存雪崩的解決辦法 緩存擊穿什么是緩存擊穿?緩存擊穿的解決辦法 區別對比 在如今的開發中&…

Android Logcat 高效調試指南

工具概覽 Logcat 是 Android SDK 提供的命令行日志工具&#xff0c;支持靈活過濾、格式定制和實時監控&#xff0c;官方文檔詳見 Android Developer。 基礎用法 命令格式 [adb] logcat [<option>] ... [<filter-spec>] ... 執行方式 直接調用&#xff08;通過ADB守…

【定昌Linux系統】部署了java程序,設置開啟啟動

將代碼上傳到相應的目錄&#xff0c;并且配置了一個.sh的啟動腳本文件 文件內容&#xff1a; #!/bin/bash# 指定JAR文件的路徑&#xff08;如果JAR文件在當前目錄&#xff0c;可以直接使用文件名&#xff09; JAR_FILE"/usr/local/java/xs_luruan_client/lib/xs_luruan_…

Java 8 中,可以使用 Stream API 和 Comparator 對 List 按照元素對象的時間字段進行倒序排序

文章目錄 引言I 示例對象II List 按時間字段倒序排序: 使用 `Stream` 和 `Comparator` 排序方法 1:使用 `Comparator.comparing`方法 2:使用 `Comparator.reversed`方法 3:自定義 `Comparator`輸出結果III 注意事項**時間字段類型**:**空值處理**:IV 總結引言 案例:在線用…

jvm內存模型,類加載機制,GC算法,垃圾回收器,jvm線上調優等常見的面試題及答案

JVM內存模型 JVM內存模型包括哪些區域 答案&#xff1a;JVM內存模型主要包括以下區域&#xff1a; 程序計數器&#xff1a;是一塊較小的內存空間&#xff0c;它可以看作是當前線程所執行的字節碼的行號指示器&#xff0c;用于記錄正在執行的虛擬機字節碼指令的地址。Java虛擬機…

git clone的時候出現出現error

報錯如下&#xff1a; Collecting githttps://github.com/haotian-liu/LLaVA.git Cloning https://github.com/haotian-liu/LLaVA.git to /tmp/pip-req-build-360q6tt1 Running command git clone --filterblob:none --quiet https://github.com/haotian-liu/LLaVA.git /t…

Minio搭建并在SpringBoot中使用完成用戶頭像的上傳

Minio使用搭建并上傳用戶頭像到服務器操作,學習筆記 Minio介紹 minio官網 MinIO是一個開源的分布式對象存儲服務器&#xff0c;支持S3協議并且可以在多節點上實現數據的高可用和容錯。它采用Go語言開發&#xff0c;擁有輕量級、高性能、易部署等特點&#xff0c;并且可以自由…

vue3中ref和reactive響應式數據、ref模板引用(組合式和選項式區別)、組件ref的使用

目錄 Ⅰ.ref 1.基本用法&#xff1a;ref響應式數據 2.ref模板引用 3.ref在v-for中的模板引用 ?4.ref在組件上使用 ?5.TS中ref數據標注類型 Ⅱ.reactive 1.基本用法&#xff1a;reactive響應式數據 2.TS中reactive標注類型 Ⅲ.ref和reactive的使用場景和區別 Ⅳ.小結…

javascript實現雪花飄落效果

本文實現雪花飄落效果的 JavaScript 網頁設計案例&#xff0c;代碼實現如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, init…

項目準備(flask+pyhon+MachineLearning)- 3

目錄 1.商品信息 2. 商品銷售預測 2.1 機器學習 2.2 預測功能 3. 模型評估 1.商品信息 app.route(/products) def products():"""商品分析頁面"""data load_data()# 計算當前期間和上期間current_period data[data[成交時間] > data[成…

FPGA開發,使用Deepseek V3還是R1(3):系統級與RTL級

以下都是Deepseek生成的答案 FPGA開發&#xff0c;使用Deepseek V3還是R1&#xff08;1&#xff09;&#xff1a;應用場景 FPGA開發&#xff0c;使用Deepseek V3還是R1&#xff08;2&#xff09;&#xff1a;V3和R1的區別 FPGA開發&#xff0c;使用Deepseek V3還是R1&#x…

實現 Leaflet 多類型點位標記與聚合功能的實戰經驗分享

在現代的地理信息系統&#xff08;GIS&#xff09;應用中&#xff0c;地圖功能是不可或缺的一部分。無論是展示商業網點、旅游景點還是公共服務設施&#xff0c;地圖都能以直觀的方式呈現數據。然而&#xff0c;當數據量較大時&#xff0c;地圖上可能會出現大量的標記點&#x…

企微審批中MySQL字段TEXT類型被截斷的排查與修復實踐

在MySQL中&#xff0c;TEXT類型字段常用于存儲較大的文本數據&#xff0c;但在一些應用場景中&#xff0c;當文本內容較大時&#xff0c;TEXT類型字段可能無法滿足需求&#xff0c;導致數據截斷或插入失敗。為了避免這種問題&#xff0c;了解不同文本類型&#xff08;如TEXT、M…

【常見BUG】Spring Boot 和 Springfox(Swagger)版本兼容問題

???歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學習,不斷總結,共同進步,活到老學到老…

HTTP 協議的發展歷程:從 HTTP/1.0 到 HTTP/2.0

HTTP 協議的發展歷程&#xff1a;從 HTTP/1.0 到 HTTP/2.0 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是 Web 的基礎協議&#xff0c;用于客戶端和服務器之間的通信。從 HTTP/1.0 到 HTTP/2.0&#xff0c;HTTP 協議經歷了多次重大改…