GoLang AES GSM

作者: 叫我null | 来源:发表于2019-09-27 10:09 被阅读0次

    以太坊Whisper协议中,默认的对称加密使用的是AES-GCM加密算法。

    AES是一种对称加密算法,它的相关概念在此不赘述。

    GCM ( Galois/Counter Mode) 指的是该对称加密采用Counter模式,并带有GMAC消息认证码。

    在详细介绍AES-GCM之前,我们先了解一些相关概念。
    https://blog.csdn.net/T0mato_/article/details/53160772

    1、准备

    // AesKey 密钥
    var AesKey string = "HQECux7Tt6UrGOUl"
    
    // nonce 初始向量
    nonce, _ := hex.DecodeString("000000010000010000000010")
    

    2、辅助函数

    func getKeys() ([]byte) {
        return []byte(AesKey)
    }
    
    func getBlock() cipher.Block {
        key := getKeys()
        block, err := aes.NewCipher(key)
        if err != nil {
            panic(err.Error())
        }
        return block
    }
    
    func getNonce() []byte {
        nonce, err := hex.DecodeString(Gsm_IV)
        if err != nil {
            panic(err.Error())
        }
        return nonce
    }
    

    3、encrypt

    func encrypt(data string) (string) {
        block := getBlock()
        nonce := getNonce()
        aesgcm, err := cipher.NewGCM(block)
        if err != nil {
            panic(err.Error())
        }
        cipherText := aesgcm.Seal(nil, nonce, []byte(data), nil)
        return fmt.Sprintf("%x", cipherText)
    }
    

    4、decrypt

    func decrypt(data string) string {
        cipherText, _ := hex.DecodeString(data)
    
        nonce := getNonce()
        block := getBlock()
    
        aesgcm, err := cipher.NewGCM(block)
        if err != nil {
            panic(err.Error())
        }
        plaintext, err := aesgcm.Open(nil, nonce, cipherText, nil)
        if err != nil {
            panic(err.Error())
        }
    
        return fmt.Sprintf("%x", plaintext)
    }
    

    相关文章

      网友评论

        本文标题:GoLang AES GSM

        本文链接:https://www.haomeiwen.com/subject/pjpouctx.html