Go语言解密上篇中用java aes实现的加密

上一篇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]