go语言如何加密源码 golang 加密解密

go使用des加密

DES(Data Encryption Standard)是一种常见的分组加密算法,由IBM公司在1971年提出。它是一种对称加密算法,也就是说它使用同一个密钥来加密和解密数据。

网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、小程序制作、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了三元免费建站欢迎大家使用!

DES使用一个56位的初始密钥,但是这里提供的是一个64位的值,这是因为在硬件实现中每8位可以用于奇偶校验。可以通过设定8位字符串,由 crypto/des 库的 des.NewCipher(key) 函数生成密钥

DES分组的大小是64位,如果加密的数据长度不是64位的倍数,可以按照某种具体的规则来填充位。常用的填充算法有 pkcs5 , zero 等

Go 实现AES-128加密解密

AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

加解密流程图:

使用CBC模式+PKCS7 填充方式实现AES的加密和解密

golang crypt包的AES加密函数的使用

golang AES加密函数的使用

AES: Advanced Encryption Standard

高阶加密标准,是用来代替 老的DES的。

AES加密算法的加密块必须是16字节(128bit),所以不足部分需要填充,常用的填充算法是PKCS7。

AES加密算法的key可以是16字节(AES128),或者24字节(AES192),或者是32字节(AES256)

ECB:Electronic Codebook Book

CBC:Cipher Block Chaining:这是最常见的块加密实现

CTR:Counter

CFB:Cipher FeedBack

OFB:Output FeedBack

具体的差异我也没去弄明白,知道这么个意思,加密算法稍后差异。

包括AES,CBC,CTR,OFB,CFB,GCM。

这其中GCM不需要加密块必须16字节长度,可以是任意长度,其他的都需要16字节对其,所以不足部分都需要补充。

3.1 AES

3.2 CBC

3.3 CTR

3.4 OFB

3.5 CFB

3.6 GCM

GCM实现算法不需要pad。

怎么用 GO 实现 RSA 的私钥加密公钥解密

func ReadBytes(path string) ([]byte, error) {

f, err := os.Open(path)

if err != nil {

return nil, err

}

defer f.Close()

return ioutil.ReadAll(f)

}

func RSAEncrypt(data []byte) ([]byte, error) {

publicKey, err := ReadBytes(`public.pem`)

if err != nil {

return nil, err

}

block, _ := pem.Decode(publicKey)

if block == nil {

return nil, errors.New("public key error")

}

pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)

if err != nil {

return nil, err

}

return rsa.EncryptPKCS1v15(rand.Reader, pubInterface.(*rsa.PublicKey), data)

}

func RSADecrypt(data []byte) ([]byte, error) {

privateKey, err := ReadBytes(`private.pem`)

if err != nil {

return nil, err

}

block, _ := pem.Decode(privateKey)

if block == nil {

return nil, errors.New("private key error")

}

priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)

if err != nil {

return nil, err

}

return rsa.DecryptPKCS1v15(rand.Reader, priv, data)

}

其中public.pem是公钥文件,private.pem是私钥文件。


文章名称:go语言如何加密源码 golang 加密解密
标题链接:http://scyanting.com/article/dohhsds.html