美文网首页
Golang常规加密算法

Golang常规加密算法

作者: pyihe | 来源:发表于2020-06-11 22:43 被阅读0次

前言

为了使平时工作更加高效,自己使用golang对常规加密算法进行了封装,方便在以后的工作中直接使用。

项目地址

实现功能

实现的功能如下:

对称加密

Type Mode Padding
DES ECB/CBC PKCS5/PKCS7/Zero/None
3DES ECB/CBC PKCS5/PKCS7/Zero/None
AES ECB/CBC PKCS5/PKCS7/Zero/None
DES CFB/OFB/CTR/GCM
3DES CFB/OFB/CTR/GCM
AES CFB/OFB/CTR/GCM
package main

import (
    "fmt"
    "github.com/pyihe/secret"
)

func main() {
    c := secret.NewCipher()
    var request = &secret.SymRequest{
        PlainData:   "this field is for data to be encrypt",
        Key:         []byte("1234567812345678"),
        Type:        secret.SymTypeAES,
        ModeType:    secret.BlockModeECB,
        PaddingType: secret.PaddingTypeZeros,
    }
    cipherString, err := c.SymEncryptToString(request)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }
    fmt.Printf("encrypt result = %s\n", cipherString)
    request.CipherData = cipherString
    plainText, err := c.SymDecrypt(request)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }
    fmt.Printf("decrypt result = %s\n", plainText)
}

非对称加密

支持RSA加密、RSA签名以及签名验证

package main

import (
    "fmt"
    "github.com/pyihe/secret"
)

func main() {
    c := secret.NewCipher()
    _, _, err := c.GenerateRSAKey(1024, "conf", secret.PKCSLevel1)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }
    cipherString, err := c.RSAEncryptToString("this field is for data to be encrypt", secret.RSAEncryptTypeOAEP, nil)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }
    fmt.Printf("rsa encrypt result: %s\n", cipherString)
    plainText, err := c.RSADecrypt(cipherString, secret.RSAEncryptTypeOAEP, nil)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }
    fmt.Printf("%s\n", plainText)
}

Hash函数

支持大部分Hash函数

package main

import (
    "crypto"
    "fmt"
    "github.com/pyihe/secret"
)

func main() {
    var data = "this is data for hash"
    h := secret.NewHasher()
    hashStr, err := h.HashToString(data, crypto.SHA256)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }
    fmt.Printf("hash result: %s\n", hashStr)
}

签名与验证签名

支持DSA、ECDSA、Ed25519签名和签名验证。

package main

import (
    "crypto"
    "crypto/dsa"
    "fmt"
    "github.com/pyihe/secret"
)

func main() {
    var data = "this is data for hash"
    s := secret.NewSigner()
    if err := s.SetDSAKey(dsa.L2048N256); err != nil {
        fmt.Printf("%v\n", err)
        return
    }
    signString, err := s.DSASignToString(data, crypto.SHA256)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }
    fmt.Printf("sign result: %s\n", signString)
    ok, err := s.DSAVerify(data, signString, crypto.SHA256)
    if err != nil {
        fmt.Printf("%v\n", err)
        return
    }
    fmt.Printf("verify result: %v\n", ok)
}

相关文章

  • Golang常规加密算法

    前言 为了使平时工作更加高效,自己使用golang对常规加密算法进行了封装,方便在以后的工作中直接使用。 项目地址...

  • golang1.7.3的ssh调试,支持diffie-hellm

    查看设备支持的kex交换算法和加密算法 查看golang支持的算法,在golang.org/x/crypto/co...

  • iOS 常规加密算法

    非对称加密: RSA:https、苹果的p12证书等 认证都是通过RSA--公钥加密,私钥解秘--私钥加密,公钥解...

  • Golang常见加密算法

    md5签名算法 md5加密是我们常用的一种加密算法,可以对明文进行处理产生一个128位(16字节)的散列值,为了便...

  • Golang 椭圆加密算法实现

    什么是椭圆加密算法 椭圆曲线密码学(英语:Elliptic Curve Cryptography,缩写:ECC)是...

  • golang变量(一)——常规变量

    一、作用域 结果输入如下(程序不会报错): 二、:= 和 = 最简单的讲:= 是给未定义的变量 定义类型的同时给予...

  • golang中crypto/aes包

    aes是对称加密算法,这篇博客只介绍怎么使用golang中怎么调用标准库已封装的算法实现,如果是要学习aes算法实...

  • Korok Engine学习一

    Korok Engine 简介 golang的2D游戏引擎,当然也可以当作常规GUI框架 参考链接 作者:noto...

  • golang日志框架logrus

    golang自带日志框架功能比较简单,仅提供print、panic、fatal三个方法,对于常规的日志切割等功能并...

  • golang原生http web进行简约封装

    常规写法 一般我们用Golang原生写Web时,一般这样写 如果需要特定的GET,POST,PUT,DELETE处...

网友评论

      本文标题:Golang常规加密算法

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