小说网站怎么做流量,北京公司logo制作,免费编程网课,姓名logo设计在线生成文章目录 开启一个项目编解码工具开发Dongle包Base64编解码摩斯密码URL加解密AES加解密 MD5碰撞工具开发 开启一个项目
这作为补充内容#xff0c;可忽略直接看下面的编解码#xff1a; 一开始用就按照下面的步骤即可
1.创建一个文件夹#xff0c;你自己定义名字(建议只用… 文章目录 开启一个项目编解码工具开发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 (fmtgithub.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(hack123).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工具了。