您好,登錄后才能下訂單哦!
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()
// 將加密內(nèi)容的字節(jié)數(shù)組拷貝到ripemd160
hasher.Write([]byte(str))
fmt.Printf("RIPEMD160:%x", hasher.Sum(nil))
}
/**
* 使用SHA256加密文件內(nèi)容
*/
func fileSha156() {
file, err := os.OpenFile("e:/test.txt", os.O_RDONLY, 0777)
if err != nil {
panic(err)
}
defer file.Close()
h := sha256.New()
// 將文件內(nèi)容拷貝到sha256中
io.Copy(h, file)
fmt.Printf("%x\n", h.Sum(nil))
}
import (
"bytes"
"crypto/cipher" //cipher密碼
"crypto/des"
"encoding/base64" //將對(duì)象轉(zhuǎn)換成字符串
"fmt"
)
/**
* DES加密方法
*/
func MyDesEncrypt(orig, key string) string{
// 將加密內(nèi)容和秘鑰轉(zhuǎn)成字節(jié)數(shù)組
origData := []byte(orig)
k := []byte(key)
// 秘鑰分組
block, _ := des.NewCipher(k)
//將明文按秘鑰的長(zhǎng)度做補(bǔ)全操作
origData = PKCS5Padding(origData, block.BlockSize())
//設(shè)置加密方式-CBC
blockMode := cipher.NewCBCDecrypter(block, k)
//創(chuàng)建明文長(zhǎng)度的字節(jié)數(shù)組
crypted := make([]byte, len(origData))
//加密明文
blockMode.CryptBlocks(crypted, origData)
//將字節(jié)數(shù)組轉(zhuǎn)換成字符串,base64編碼
return base64.StdEncoding.EncodeToString(crypted)
}
/**
* DES解密方法
*/
func MyDESDecrypt(data string, key string) string {
k := []byte(key)
//將加密字符串用base64轉(zhuǎn)換成字節(jié)數(shù)組
crypted, _ := base64.StdEncoding.DecodeString(data)
//將字節(jié)秘鑰轉(zhuǎn)換成block快
block, _ := des.NewCipher(k)
//設(shè)置解密方式-CBC
blockMode := cipher.NewCBCEncrypter(block, k)
//創(chuàng)建密文大小的數(shù)組變量
origData := make([]byte, len(crypted))
//解密密文到數(shù)組origData中
blockMode.CryptBlocks(origData, crypted)
//去掉加密時(shí)補(bǔ)全的部分
origData = PKCS5UnPadding(origData)
return string(origData)
}
/**
* 實(shí)現(xiàn)明文的補(bǔ)全
* 如果ciphertext的長(zhǎng)度為blockSize的整數(shù)倍,則不需要補(bǔ)全
* 否則差幾個(gè)則被幾個(gè),例:差5個(gè)則補(bǔ)5個(gè)5
*/
func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}
/**
* 實(shí)現(xiàn)去補(bǔ)碼,PKCS5Padding的反函數(shù)
*/
func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
// 去掉最后一個(gè)字節(jié) unpadding 次
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
func main() {
orig := "Hello World!"
fmt.Println("原文:", orig)
//聲明秘鑰,利用此秘鑰實(shí)現(xiàn)明文的加密和密文的解密,長(zhǎng)度必須為8
key := "12345678"
//加密
encyptCode := MyDesEncrypt(orig, key)
fmt.Println("密文:", encyptCode)
//解密
decyptCode := MyDESDecrypt(encyptCode, key)
fmt.Println("解密結(jié)果:", decyptCode)
}
import (
"bytes"
"crypto/cipher"
"crypto/des"
"encoding/base64"
"fmt"
)
func main() {
orig := "hello world"
// 3DES的秘鑰長(zhǎng)度必須為24位
key := "123456781234567812345678"
fmt.Println("原文:", orig)
encryptCode := TripleDesEncrypt(orig, key)
fmt.Println("密文:", encryptCode)
decryptCode := TipleDesDecrypt(encryptCode, key)
fmt.Println("解密結(jié)果:", decryptCode)
}
/**
* 加密
*/
func TripleDesEncrypt(orig, key string) string {
// 轉(zhuǎn)成字節(jié)數(shù)組
origData := []byte(orig)
k := []byte(key)
// 3DES的秘鑰長(zhǎng)度必須為24位
block, _ := des.NewTripleDESCipher(k)
// 補(bǔ)全碼
origData = PKCS5Padding(origData, block.BlockSize())
// 設(shè)置加密方式
blockMode := cipher.NewCBCEncrypter(block, k[:8])
// 創(chuàng)建密文數(shù)組
crypted := make([]byte, len(origData))
// 加密
blockMode.CryptBlocks(crypted, origData)
return base64.StdEncoding.EncodeToString(crypted)
}
/**
* 解密
*/
func TipleDesDecrypt(crypted string, key string) string {
// 用base64轉(zhuǎn)成字節(jié)數(shù)組
cryptedByte, _ := base64.StdEncoding.DecodeString(crypted)
// key轉(zhuǎn)成字節(jié)數(shù)組
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)
// 去掉最后一個(gè)字節(jié) 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("解密結(jié)果:", decryptCode)
}
func AesEncrypt(orig string, key string) string {
// 轉(zhuǎn)成字節(jié)數(shù)組
origData := []byte(orig)
k := []byte(key)
// 分組秘鑰
block, _ := aes.NewCipher(k)
// 獲取秘鑰塊的長(zhǎng)度
blockSize := block.BlockSize()
// 補(bǔ)全碼
origData = PKCS7Padding(origData, blockSize)
// 加密模式
blockMode := cipher.NewCBCEncrypter(block, k[:blockSize])
// 創(chuàng)建數(shù)組
cryted := make([]byte, len(origData))
// 加密
blockMode.CryptBlocks(cryted, origData)
return base64.StdEncoding.EncodeToString(cryted)
}
func AesDecrypt(cryted string, key string) string {
// 轉(zhuǎn)成字節(jié)數(shù)組
crytedByte, _ := base64.StdEncoding.DecodeString(cryted)
k := []byte(key)
// 分組秘鑰
block, _ := aes.NewCipher(k)
// 獲取秘鑰塊的長(zhǎng)度
blockSize := block.BlockSize()
// 加密模式
blockMode := cipher.NewCBCDecrypter(block, k[:blockSize])
// 創(chuàng)建數(shù)組
orig := make([]byte, len(crytedByte))
// 解密
blockMode.CryptBlocks(orig, crytedByte)
// 去補(bǔ)全碼
orig = PKCS7UnPadding(orig)
return string(orig)
}
//補(bǔ)碼
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)]
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。