import ( "fmt" "crypto/sha256" "os" "io" "crypto/md5" "golang.org/x/crypto/ripemd160" ) func main() { str := "hello world" sum := sha256.Sum256([]byte(str)) fmt.Printf("SHA256:%x\n", sum) fileSha156() result := md5.Sum([]byte(str)) fmt.Printf("MD5:%x\n", result) hasher := ripemd160.New() // 将加密内容的字节数组拷贝到ripemd160 hasher.Write([]byte(str)) fmt.Printf("RIPEMD160:%x", hasher.Sum(nil)) } /** * 使用SHA256加密文件内容 */ func fileSha156() { file, err := os.OpenFile("e:/test.txt", os.O_RDONLY, 0777) if err != nil { panic(err) } defer file.Close() h := sha256.New() // 将文件内容拷贝到sha256中 io.Copy(h, file) fmt.Printf("%x\n", h.Sum(nil)) }
import ( "bytes" "crypto/cipher" //cipher密码 "crypto/des" "encoding/base64" //将对象转换成字符串 "fmt" ) /** * DES加密方法 */ func MyDesEncrypt(orig, key string) string{ // 将加密内容和秘钥转成字节数组 origData := []byte(orig) k := []byte(key) // 秘钥分组 block, _ := des.NewCipher(k) //将明文按秘钥的长度做补全操作 origData = PKCS5Padding(origData, block.BlockSize()) //设置加密方式-CBC blockMode := cipher.NewCBCDecrypter(block, k) //创建明文长度的字节数组 crypted := make([]byte, len(origData)) //加密明文 blockMode.CryptBlocks(crypted, origData) //将字节数组转换成字符串,base64编码 return base64.StdEncoding.EncodeToString(crypted) } /** * DES解密方法 */ func MyDESDecrypt(data string, key string) string { k := []byte(key) //将加密字符串用base64转换成字节数组 crypted, _ := base64.StdEncoding.DecodeString(data) //将字节秘钥转换成block快 block, _ := des.NewCipher(k) //设置解密方式-CBC blockMode := cipher.NewCBCEncrypter(block, k) //创建密文大小的数组变量 origData := make([]byte, len(crypted)) //解密密文到数组origData中 blockMode.CryptBlocks(origData, crypted) //去掉加密时补全的部分 origData = PKCS5UnPadding(origData) return string(origData) } /** * 实现明文的补全 * 如果ciphertext的长度为blockSize的整数倍,则不需要补全 * 否则差几个则被几个,例:差5个则补5个5 */ func PKCS5Padding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ciphertext)%blockSize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padtext...) } /** * 实现去补码,PKCS5Padding的反函数 */ func PKCS5UnPadding(origData []byte) []byte { length := len(origData) // 去掉最后一个字节 unpadding 次 unpadding := int(origData[length-1]) return origData[:(length - unpadding)] } func main() { orig := "Hello World!" fmt.Println("原文:", orig) //声明秘钥,利用此秘钥实现明文的加密和密文的解密,长度必须为8 key := "12345678" //加密 encyptCode := MyDesEncrypt(orig, key) fmt.Println("密文:", encyptCode) //解密 decyptCode := MyDESDecrypt(encyptCode, key) fmt.Println("解密结果:", decyptCode) }
import ( "bytes" "crypto/cipher" "crypto/des" "encoding/base64" "fmt" ) func main() { orig := "hello world" // 3DES的秘钥长度必须为24位 key := "123456781234567812345678" fmt.Println("原文:", orig) encryptCode := TripleDesEncrypt(orig, key) fmt.Println("密文:", encryptCode) decryptCode := TipleDesDecrypt(encryptCode, key) fmt.Println("解密结果:", decryptCode) } /** * 加密 */ func TripleDesEncrypt(orig, key string) string { // 转成字节数组 origData := []byte(orig) k := []byte(key) // 3DES的秘钥长度必须为24位 block, _ := des.NewTripleDESCipher(k) // 补全码 origData = PKCS5Padding(origData, block.BlockSize()) // 设置加密方式 blockMode := cipher.NewCBCEncrypter(block, k[:8]) // 创建密文数组 crypted := make([]byte, len(origData)) // 加密 blockMode.CryptBlocks(crypted, origData) return base64.StdEncoding.EncodeToString(crypted) } /** * 解密 */ func TipleDesDecrypt(crypted string, key string) string { // 用base64转成字节数组 cryptedByte, _ := base64.StdEncoding.DecodeString(crypted) // key转成字节数组 k := []byte(key) block, _ := des.NewTripleDESCipher(k) blockMode := cipher.NewCBCDecrypter(block, k[:8]) origData := make([]byte, len(cryptedByte)) blockMode.CryptBlocks(origData, cryptedByte) origData = PKCS5UnPadding(origData) return string(origData) } func PKCS5Padding(orig []byte, size int) []byte { length := len(orig) padding := size - length%size paddintText := bytes.Repeat([]byte{byte(padding)}, padding) return append(orig, paddintText...) } func PKCS5UnPadding(origData []byte) []byte { length := len(origData) // 去掉最后一个字节 unpadding 次 unpadding := int(origData[length-1]) return origData[:(length - unpadding)] }
import ( "bytes" "crypto/aes" "fmt" "crypto/cipher" "encoding/base64" ) func main() { orig := "hello world" key := "123456781234567812345678" fmt.Println("原文:", orig) encryptCode := AesEncrypt(orig, key) fmt.Println("密文:" , encryptCode) decryptCode := AesDecrypt(encryptCode, key) fmt.Println("解密结果:", decryptCode) } func AesEncrypt(orig string, key string) string { // 转成字节数组 origData := []byte(orig) k := []byte(key) // 分组秘钥 block, _ := aes.NewCipher(k) // 获取秘钥块的长度 blockSize := block.BlockSize() // 补全码 origData = PKCS7Padding(origData, blockSize) // 加密模式 blockMode := cipher.NewCBCEncrypter(block, k[:blockSize]) // 创建数组 cryted := make([]byte, len(origData)) // 加密 blockMode.CryptBlocks(cryted, origData) return base64.StdEncoding.EncodeToString(cryted) } func AesDecrypt(cryted string, key string) string { // 转成字节数组 crytedByte, _ := base64.StdEncoding.DecodeString(cryted) k := []byte(key) // 分组秘钥 block, _ := aes.NewCipher(k) // 获取秘钥块的长度 blockSize := block.BlockSize() // 加密模式 blockMode := cipher.NewCBCDecrypter(block, k[:blockSize]) // 创建数组 orig := make([]byte, len(crytedByte)) // 解密 blockMode.CryptBlocks(orig, crytedByte) // 去补全码 orig = PKCS7UnPadding(orig) return string(orig) } //补码 func PKCS7Padding(ciphertext []byte, blocksize int) []byte { padding := blocksize - len(ciphertext)%blocksize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padtext...) } //去码 func PKCS7UnPadding(origData []byte) []byte { length := len(origData) unpadding := int(origData[length-1]) return origData[:(length - unpadding)] }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。