Skip to content

houseme/gocrypto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoCrypto 使用说明

Go Reference GoCrypto CI GitHub GitHub go.mod Go version (branch)

特别说明

based on GoRSA, GoCrypt Optimized the following points for packaging:

  • Optimization of public and private keys requires registration and initialization in advance.
  • The encryption machine does not perform base64 processing, and avoids secondary encapsulation of base64 during cross-program transfer or storage
  • The incoming return uses the string type uniformly to avoid conversion trouble
  • Supports RSAWithSHA1 and RSAWithSHA256 signature verification algorithms

此版本新增了 AES、DES、3DES、HMAC、HASH 等常见加/解密及 hash 获取方式,结构作了些调整,由之前的版本更新到此版本时一定要注意引用方法包名的变化。AES/DES 块加密时,填充默认采用 PKCS7 padding( 如果块大小为 64 位(8 字节)时,此时 PKCS7 与 PKCS5 结果一致).

get & import

go get -u -v github.com/houseme/gocrypto

使用方法

1.构建需要加解密的类型 handle

    handleRSA := rsa.NewRSACrypt(secretInfo) // RSA
    handleDES := des.NewDESCrypt(key) // des
    handle3DES := des.NewTripleDESCrypt(key) // 3des
    handleAES := aes.NewAESCrypt(key) // aes
    handleHash := hash.NewHash(hashType) // common hash
    handleHMAC := hash.NewHMAC(hashType, key) // hmac

2.加密、解密、hash、hmac

(1)加密

加密指定字符串,并以指定编码格式输出结果

    encrypt, err := handle.Encrypt(src) // des/3des/aes

(2)解密

解密指定格式编码后的加密串,返回原字符串

    decrypt, err := handle.Decrypt(src) // des/3des/aes

(3)hash/hmac

哈希运算/密钥相关的哈希运算。

    handle.Get([]byte("123456"))// 输出 []byte
handle.EncodeToString([]byte("123456"), gocrypto.HEX) // 输出为 hex 格式的字符串

RSA 加密、解密、签名、验签

1.设置公私钥信息

secretInfo := rsa.SecretInfo{
    PublicKey:          "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyoiAraTnAbCoqGVOKugFDM2/ms2szXmb3zTOU3ByicH/XPZqy7Eougbs8OQQIoNW4xKw8PNyWf0lfr90qBfPj27INn6N7umVmbHCNCKkQ4frPn46xesw1ywtc2GhOEzZlC8ajlnzBUkj5FJZcrNjXfFmfsQcFQP0g/o/3CAUpk1BXFXt7eZsaYdyn0m7fMoyFt1wlF8egQeGYYE98vtKsvrII51HK8vOEf+5VXU4UZxGfvyzS3A8kuNEkKEh1n9mazjfPBT0KGSiOGh7Nugks+jjfswSgXRK/b2eP3fS7U625rbS798pKxnoS2E0Pgpzdk5fWoNgAlG/n2F9oI2/kQIDAQAB",
    PublicKeyDataType:  gocrypto.Base64,
    PrivateKey:         "MIIEowIBAAKCAQEAyoiAraTnAbCoqGVOKugFDM2/ms2szXmb3zTOU3ByicH/XPZqy7Eougbs8OQQIoNW4xKw8PNyWf0lfr90qBfPj27INn6N7umVmbHCNCKkQ4frPn46xesw1ywtc2GhOEzZlC8ajlnzBUkj5FJZcrNjXfFmfsQcFQP0g/o/3CAUpk1BXFXt7eZsaYdyn0m7fMoyFt1wlF8egQeGYYE98vtKsvrII51HK8vOEf+5VXU4UZxGfvyzS3A8kuNEkKEh1n9mazjfPBT0KGSiOGh7Nugks+jjfswSgXRK/b2eP3fS7U625rbS798pKxnoS2E0Pgpzdk5fWoNgAlG/n2F9oI2/kQIDAQABAoIBAF378hqiR0CVhe5+9EMc4BsM7zka8HF5WUe+7W/y4nPivmmZP/29/DQ3OoSekI4zfIJrDgkCL7JqspeaqLvIMN1Sfz4qhBq18mIcBw7CdI+R5yxcz1FAzq1LJtxAFdxWbTFCmoQsYYW2Zx1wyWlcrWPOvc1dm9p0t2b3HeM8T9jLdY+D0Bm9zmAS0nwTuDBxYS77DB9Ncl6pWLLd197/5IoN1/nunFuzpkiwMPI9RF7lgrnUthc/1Gfnylz5/tXCiQsEVSbAdbMXt9nsV0RgVeMcPq/aUqTMLS2lIV8JySWDrRQi4yPHU0hIjcp6ggo53YMuncJZweI/wwkJexojz0ECgYEA5QzRObpU0CryfJ7qa97/USIKHbvl6PuQG9OLyUeP9bG0edidQhUrR4EZwjIl73O8CTJ0bB24wAKZZEOK3eJeqG/N0q+CiD83ygr8pSZzpE1xvqQp32IgXtgvm7/UmT8cfAp05Z3bF4jcA8uXwodBz4NsVGijlO78PsCooLsArM0CgYEA4lz5pXDEN3w5JwkbspLnUSUS738hne8YM0PchCaww+8sXLS9GLL2CHcvwh6Tv9Mee7r6SdbDI73x118y68WEDDhidiYZCLhXJN2v12ezJOMqH5m9wVJzQOGNv6kPV1EW1WlWxoJQGxCdzbZMLxtTbyTZe3+iAVG++8u6NWMV3dUCgYA1dm1rnQto321kGy+6Z/2OMXTNBeufGwDDDfilzZdTkNwASMhEAW7trLuXcV8bahcsymMUTUevQawOFBnYupq/lAEluSOtq5vZBAF+huAdLJptFiJT6rKFkM5j+z2jW3DJnyMz6UmXT7GTDTVqCWoaBqIFfbsY60NjXlK92YhJzQKBgQDWfQjktbSHasLw9RV0oPRklD+cBhfBgfOpZ+0En3CxR+j+MxhW1gSBQwZS5wxTIGXrEeHlo4UmUe5diExE0dRsi+ToVPM1qw6P1SuwbQd3tXSNmu0NyOWCnfblm/j4YNLFB1p9IK9s5dLRQKJxpG/ribw15FuK6n2QM5vOyIPIvQKBgE5PUzRUCCVsjKAxZOfaZQatMbSzAUSB3bNmUw+F3pDq8ibs6XXvtySowG2femlPDNL7mDMuUc9kYrtTFTQNrEsQGB55wBopX3UxzRjpXJoAQ/d+RPdrSJC7xJyu+URoFI6ae0I3bx1BzjctYU0Rv5DUh+j9leMH5N2S9vHb+vqu",
    PrivateKeyType:     gocrypto.PKCS1,
    PrivateKeyDataType: gocrypto.Base64,
    HashType:           gocrypto.SHA256,
}
handle := rsa.NewRSACrypt(secretInfo)

加密、解密、签名、验签

(1)RSA 加密

加密指定字符串,并以指定编码格式输出结果

encrypt, err := handle.Encrypt("test", gocrypto.HEX)
if err != nil {
    fmt.Println("encrypt error :", err)
    return
}
fmt.Println("encrypt data :", encrypt)

(2)RSA 解密

解密指定格式编码后的加密串,返回原字符串

decrypt, err := handle.Decrypt(encrypt, gocrypto.HEX)
if err != nil {
    fmt.Println("decrypt error :", err)
    return
}
fmt.Println("decrypt data :", decrypt)

(3)RSA 签名

以指定摘要算法签名,并以指定编码格式输出结果,仅适用于 RSA。

sign, err := handle.Sign("test", gocrypto.HEX)
if err != nil {
    fmt.Println("sign error :", err)
    return
}
fmt.Println("sign data :", sign)

(4)RSA 验签

验证字符串是否是以指定摘要算法编码的签名串的原始字符串,仅适用于 RSA。

verifySign, err := handle.VerifySign("test", sign, gocrypto.HEX)
if err != nil {
    fmt.Println("verifySign error :", err)
    return
}
fmt.Println("verifySign result :", verifySign)

(5)RSA 私钥加密

加密指定字符串,并以指定编码格式输出结果

encrypt, err := handle.EncryptByPriKey("test", gocrypto.HEX)
if err != nil {
    fmt.Println("encrypt error :", err)
    return
}
fmt.Println("encrypt data :", encrypt)

(6)RSA 公钥解密

解密指定格式编码后的加密串,返回原字符串

decrypt, err := handle.DecryptByPublic(encrypt, gocrypto.HEX)
if err != nil {
    fmt.Println("decrypt error :", err)
    return
}
fmt.Println("decrypt data :", decrypt)

License

Licensed under either of Apache License, Version 2.0, LICENSE at your option.