写在前面

我们的敏感数据应该如何进行脱敏呢?脱敏处理
github地址:https://github.com/CocaineCong/secret
 AES/DES/3DES/RSA 等的加密算法

coding make secret secret

对称加密 AES、DES、3DES 以及非对称加密 RSA 的上层封装接口
github地址

使用说明

go get github.com/CocaineCong/secret

AES

special signkeyspecial sign 和 key拼接来进行加密
对应密钥的长度specialSign 和 key 加起来的长度小于 16位多于16位

如果 specialSign 和 key 加起来的长度小于 对应所需要加密的密钥的长度 ,我们提醒,因为公开了部分密钥,容易被攻破有风险。

the length of specialSign and key less 24 
构造 AesEncrypt 对象
specialSign := "][;,[2psldp0981zx;./"
key := "458796" // key 密钥
aesEncrypt, _ := NewAesEncrypt(specialSign, key) // 构建一个aes加密器

再传入我们的所需要加密的对象即可,目前只封装了CBC模式,后续我们会支持更多的模式。

str := aesEncrypt.SecretEncrypt("this is a secret")
fmt.Println(str)
ans := aesEncrypt.SecretDecrypt(str)
fmt.Println(ans)

结果如下:

efdaae09519f845fb5b182bea986f231939ec3aace3449db7bc92e532e7897c5
this is a secret

这样我们就完成了一次加解密了。

DES、3DES也是类似的

RSA

private.pempublish.pem默认放在当前工作目录的路径下 ! 

指定rsa加密对象,并且保存公私钥

rsa := NewRsaEncrypt(RsaBits1024, "", "", "", "")
_ = rsa.SaveRsaKey() // 保存公私钥

使用公钥对这条语句进行加密

secret, _ := rsa.RsaEncrypt("this is a secret", rsa.PublishKeyPath)
fmt.Println("secret", secret)
 byte 类型
srcStr := rsa.EncryptString(secret)

当然我们加密同样也需要传入 byte 类型,所以要对这个 string 类型转成 byte 类型。

srcByte := rsa.DecryptByte(srcStr)

转成byte类型之后,我们才进行解密

ans, _ := rsa.RsaDecrypt(secret, rsa.PrivateKeyPath)
fmt.Println(ans)

这次返回的是string类型的了

结果如下:

src aUpVbJqOYvcDil7PmGRZ5iaOJ1oAhWE84uqlUZ5REqZFTW/p/enSTrA/dSGC9puHWuVesFTkYAl5dJtfNAHlCdODOP9xzj1gSQVSQblPFxUnRq1DwSgI3Y4ktApicuD26Pm5ViC5rYP9uCqNTo6Ewo1QQhs+c25EVNOzFHijYQ4=
ans this is a secret

开源共建

非常欢迎感兴趣的同学一起加入,共同维护这个secret包!

coding make secret secret

一些疑问?

1. 为什么会有这个包?

因为我们的 AES加密,如果密钥全部由用户来输入的话,至少要输入16位,所以我们打算在代码层面减少一些用户的负担。

2. 部分密钥写在代码里面?安全吗?

special sign

3. 这个包适用哪些场景?

推荐在tob的业务使用,加密一些邮箱,手机,身份证等秘密信息,同样的,我们 key 可以使用数据库的字段,比如主键id来进行填入。