-
Notifications
You must be signed in to change notification settings - Fork 6
Home
吴成进 edited this page Nov 6, 2018
·
1 revision
一个简单的go结构,用于加密、解密字符串。
以下是此结构的功能。我们相信这些属性与许多人在golang中加密字符串时所寻求的一致。
适用于字符串:它应该加密任意字符串或字节数组。这意味着它需要有效地处理多个块(CBC)和部分块(填充)。它始终使用base64对密文,IV和密钥材料进行序列化和反序列化,以便于存储。
算法和模式:我们选择:AES 128,CBC和PKCS5填充。
IV处理:我们在每次加密之前安全地生成随机IV,并提供一个简单的类来将IV和密文保持在一起,以便它们易于跟踪和存储。我们设置IV,然后从Cipher类请求它,以便在各种Android版本之间兼容。
完整性:很多人认为AES内置了完整性检查。他们的想法是,“如果它正确解密,则由具有私钥的人生成”。实际上,AES CBC允许攻击者修改消息。因此,我们还以SHA 256哈希的形式添加了完整性检查。
这是一个非常简单的go结构,结构应该很容易粘贴到现有的代码库中。
go get github.com/ChengjinWu/aescrypto
/*
*src 要加密的字符串
*key 用来加密的密钥 密钥长度可以是128bit、192bit、256bit中的任意一个
*16位key对应128bit
*/
src := "10001111111111111111111111111123456789"
key := "1234123412341234123412341234abcd"
crypted, err := aescrypto.AesEcbPkcs5Encrypt([]byte(src), []byte(key))
if err != nil {
fmt.Println(err)
}
fmt.Println("base64UrlSafe result:", base64.URLEncoding.EncodeToString(crypted))
data, err := aescrypto.AesEcbPkcs5Decrypt(crypted, []byte(key))
if err != nil {
fmt.Println(err)
}
fmt.Println("source is :", string(data))
/*
*src 要加密的字符串
*key 用来加密的密钥 密钥长度可以是128bit、192bit、256bit中的任意一个
*16位key对应128bit
*/
src := "10001111111111111111111111111123456789"
key := "1234123412341234123412341234abcd"
crypted, err := aescrypto.AesCbcPkcs7Encrypt([]byte(src), []byte(key), nil)
if err != nil {
fmt.Println(err)
}
fmt.Println("base64UrlSafe result:", base64.URLEncoding.EncodeToString(crypted))
data, err := aescrypto.AesCbcPkcs7Decrypt(crypted, []byte(key), nil)
if err != nil {
fmt.Println(err)
}
fmt.Println("source is :", string(data))
联系我们:[[email protected]]([email protected])了解更多信息 细节。