上一篇java aes文件加解密中加密的梅须逊雪三分白,雪却输梅一段香。使用go语言解密。
解密代码如下:
AESUtil.go
package util import ( "crypto/cipher" "crypto/aes" "encoding/hex" "fmt" ) type Aes struct { } //解密 func (this *Aes) CBCDecrypter(key []byte, content_str string) (strDesc string, err error) { content,_ :=hex.DecodeString(content_str) block, err := aes.NewCipher(key) if err != nil { panic(err) } if len(content) < aes.BlockSize { panic("content too short") } //初始化向量,和上一篇中java加密使用的iv相同 iv :=[]byte("abcdefghijk1mnop") // CBC mode always works in whole blocks. if len(content)%aes.BlockSize != 0 { panic("content is not a multiple of the block size") } mode := cipher.NewCBCDecrypter(block, iv) // CryptBlocks可以原地更新 mode.CryptBlocks(content, content) //fmt.Println(strings.Trim(string(content),"u0005")+ "++") fmt.Println(string(content)) return string(content), nil }
测试方法为:
func TestAesDecrypt(t *testing.T) { aes :=Aes{} //key为上一篇java中加密使用的key,content_str为梅须逊雪三分白,雪却输梅一段香加密后的字符串。 key :=[]byte("0123456789abcdef") content_str :="a5856355ef87955f0f112970495502ebe61b9bce4998bc777c9b383d608c1ba2da97f377914354d2e0d6500d1dac786aa69e593a67a17030389624223c5ee8fd" aes.CBCDecrypter(key, content_str) }
运行测试方法得到如下解密内容,可见已完成解密:
梅须逊雪三分白,雪却输梅一段香。
注意:这里输出的是以u0005为分隔符,其他为空的6个字符串,第一个字符串为梅须逊雪三分白,雪却输梅一段香。可用如下方法截取:
strings.Split(content, "u0005")[0]