1.單向加密
什么是單向加密算法共屈。簡(jiǎn)而言之就是不可解密的加密方法柬采,也叫作非可逆加密, 用這種方法加密過(guò)的東西搏予,地球上現(xiàn)有的人類(lèi)在有限的時(shí)間內(nèi)是無(wú)法解密的熊锭,包括加密者自己。
2.常用的單向加密算法有哪些呢雪侥?
主要有:BASE64碗殷、MD5、SHA速缨、HMAC锌妻,其中最為常見(jiàn)的就有MD5,BASE64鸟廓。這里我們主要介紹最常使用的MD5算法从祝。該算法可以用來(lái)得到一個(gè)128bit的值襟己,既可以作為K-V中的key,也可以對(duì)密碼進(jìn)行加密從而確保其在傳輸中"不可見(jiàn)"牍陌。
3.Golang的加密庫(kù)都放在crypto目錄下擎浴,其中MD5庫(kù)在crypto/md5包中,該包主要提供了New和Sum函數(shù)毒涧。
函數(shù)原型:
func Sum(data []byte) [Size]byte
返回?cái)?shù)據(jù)data的MD5校驗(yàn)和贮预。
初始化一個(gè)MD5對(duì)象.Sum 函數(shù)是對(duì)hash.Hash對(duì)象內(nèi)部存儲(chǔ)的內(nèi)容進(jìn)行校驗(yàn)和計(jì)算然后將其追加到data的后面形成一個(gè)新的byte切片。因此通常的使用方法就是將data置為nil契讲。
該方法返回一個(gè)Size大小的byte數(shù)組仿吞,對(duì)于MD5來(lái)說(shuō)就是一個(gè)128bit的16字節(jié)byte數(shù)組。
func New() hash.Hash
返回一個(gè)新的使用MD5校驗(yàn)的hash.Hash接口捡偏。初始化一個(gè)MD5對(duì)象.
func main() {
h := md5.New()
h.Write([]byte("123456")) // 需要加密的字符串為 123456
cipherStr := h.Sum(nil)
fmt.Println(cipherStr)
fmt.Printf("%s\n", hex.EncodeToString(cipherStr)) // e10adc3949ba59abbe56e057f20f883e
}
Base64編碼
const (
base64Table = "123QRSTUabcdVWXYZHijKLAWDCABDstEFGuvwxyzGHIJklmnopqr234560178912"
)
var coder = base64.NewEncoding(base64Table)
func base64Encode(src []byte) []byte {
return []byte(coder.EncodeToString(src))
}
func base64Decode(src []byte) ([]byte, error) {
return coder.DecodeString(string(src))
}
func main() {
// encode
hello := "hello world"
debyte := base64Encode([]byte(hello))
// decode
enbyte, err := base64Decode(debyte)
if err != nil {
fmt.Println(err.Error())
}
if hello != string(enbyte) {
fmt.Println("hello is not equal to enbyte")
}
fmt.Println(string(enbyte))
}