Encryption Go-解码twofish编码的密码

Encryption Go-解码twofish编码的密码,encryption,go,twofish,Encryption,Go,Twofish,我正在使用code.google.com/p/go.crypto/twofish,我想解密从数据库中获取的密码。密码由PHP加密,并由base64编码。在Go中,我按base64解码,转换为[]字节,并尝试对其进行解密,但出现了一些问题。我的报税表是空的。这是我的密码: func TwofishDecrypt(key, text []byte) ([]byte, error) { block, err := twofish.NewCipher(key) if err != nil

我正在使用code.google.com/p/go.crypto/twofish,我想解密从数据库中获取的密码。密码由PHP加密,并由base64编码。在Go中,我按base64解码,转换为[]字节,并尝试对其进行解密,但出现了一些问题。我的报税表是空的。这是我的密码:

func TwofishDecrypt(key, text []byte) ([]byte, error) {
    block, err := twofish.NewCipher(key)
    if err != nil {
        return nil, err
    }

    if len(text) < twofish.BlockSize {
        return nil, errors.New("ciphertext too short")
    }

    iv := text[:twofish.BlockSize]
    text = text[twofish.BlockSize:]
    cfb := cipher.NewCFBDecrypter(block, iv)
     cfb.XORKeyStream(text, text)
     data, err := base64.StdEncoding.DecodeString(string(text))
     if err != nil {
        return nil, err
    }

    return data, nil
}
func TwofishDecrypt(密钥,文本[]字节)([]字节,错误){
block,err:=twofish.NewCipher(密钥)
如果错误!=零{
返回零,错误
}
如果len(text)
在解密base64之前,您不需要对其进行解码吗?通常就是这样做的。encrypt->base64 encode->store->base64 decode->Decrypt一条一般性的建议:密码永远不应该被存储(即使是加密的),你应该只存储一个(盐渍的)密码散列。“行业标准”密码散列函数是bcrypt(),也许您应该研究一下。这里介绍了如何在Go中执行此操作:或者您正在检查从该函数返回的错误?如果出现错误,则该值为零。您能展示用于加密的PHP代码吗?iv不应该是文本,它应该是一些单独的值,这取决于加密代码(据我所知)。