美文网首页工作生活
Golang 椭圆加密算法实现

Golang 椭圆加密算法实现

作者: hwholiday | 来源:发表于2019-07-04 09:50 被阅读0次

    什么是椭圆加密算法

    椭圆曲线密码学(英语:Elliptic Curve Cryptography,缩写:ECC)是一种基于椭圆曲线数学的公开密钥加密算法。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。

    ECC的主要优势是在某些情况下它比其他的算法(比如RSA加密算法)使用更小的密钥并提供相当的或更高等级的安全。ECC的另一个优势是可以定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。
    不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。

    代码实现

        var Aprivate, Apublic [32]byte
        //产生随机数
        if _, err := io.ReadFull(rand.Reader, Aprivate[:]); err != nil {
            os.Exit(0)
        }
        curve25519.ScalarBaseMult(&Apublic, &Aprivate)
        fmt.Println("A私钥", base64.StdEncoding.EncodeToString(Aprivate[:]))
        fmt.Println("A公钥", base64.StdEncoding.EncodeToString(Apublic[:])) //作为椭圆起点
    
        var Bprivate, Bpublic [32]byte
        //产生随机数
        if _, err := io.ReadFull(rand.Reader, Bprivate[:]); err != nil {
            os.Exit(0)
        }
        curve25519.ScalarBaseMult(&Bpublic, &Bprivate)
        fmt.Println("B私钥",  base64.StdEncoding.EncodeToString(Bprivate[:]))
        fmt.Println("B公钥",  base64.StdEncoding.EncodeToString(Bpublic[:])) //作为椭圆起点
    
        var Akey, Bkey [32]byte
    
        //A的私钥加上B的公钥计算A的key
        curve25519.ScalarMult(&Akey, &Aprivate, &Bpublic)
    
        //B的私钥加上A的公钥计算B的key
        curve25519.ScalarMult(&Bkey, &Bprivate, &Apublic)
    
        fmt.Println("A交互的KEY",  base64.StdEncoding.EncodeToString(Akey[:]))
        fmt.Println("B交互的KEY",  base64.StdEncoding.EncodeToString(Bkey[:]))
    

    输出值

    A私钥 7i3ADsF/e47UHxdZW1dP5R+OO4wZjK8lHIvW0Y65CZY=
    A公钥 DTyAub5yB+ZpPJl0D6jcL7RPu0elDBcWxlBkP9DaCFY=
    B私钥 dnkaHZ8BouXCuZTcjDwAmrsZhGd8WMrLhsYsisdd1dQ=
    B公钥 ob63R56KbVqQghFDfB6qMX0/8kKYy4ZkIKacAaedw3o=
    A交互的KEY yn6TpBZprWR+pr++lFJFOEawNJ/gp2grLvYLBS8pjDY=
    B交互的KEY yn6TpBZprWR+pr++lFJFOEawNJ/gp2grLvYLBS8pjDY=
    

    完整演示代码 点击这里

    联系 QQ: 3355168235

    相关文章

      网友评论

        本文标题:Golang 椭圆加密算法实现

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