Golang常规加密算法

心中的日月_pyihe · · 964 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

为了使平时工作更加高效,自己使用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)
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:心中的日月_pyihe

查看原文:Golang常规加密算法

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

964 次点击  ∙  1 赞  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传