Skip to content
吴成进 edited this page Nov 6, 2018 · 1 revision

golang-AES-密码

一个简单的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

示例

aes、ecb、pkcs7加密解密算法

  /*
  	*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))

aes、cbc、pkcs7加密解密算法

  	/*
  	*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))

关于

联系我们:[369973338@qq.com](369973338@qq.com)了解更多信息 细节。