当前尝试将5个字符长的纯文本加密为12个字符的加密字符串。我希望能够指定一个唯一的IV(不是随机生成的),一个唯一的密钥,并使用DES。我当前的代码要求纯文本长8个字符(5个字符的名称加上3个空格)。
我已经遇到了这个问题。这是由于填充问题。您想要的代码是
代码链接您可以在操场上进行测试。
package main import ( "crypto/cipher" "crypto/des" "encoding/base64" "fmt" "bytes" ) func main() { originalText := "yolan" fmt.Println(originalText) key := []byte{0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC} // encrypt value to base64 cryptoText := encrypt(key, originalText) fmt.Println(cryptoText) } // encrypt string to base64 crypto using des func encrypt(key []byte, text string) string { plaintext := []byte(text) block, err := des.NewCipher(key) if err != nil { panic(err) } iv := []byte{0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC} blockSize := block.BlockSize() origData := PKCS5Padding(plaintext, blockSize) blockMode := cipher.NewCBCEncrypter(block, iv) cryted := make([]byte, len(origData)) blockMode.CryptBlocks(cryted, origData) return base64.URLEncoding.EncodeToString(cryted) } func PKCS5Padding(src []byte, blockSize int) []byte { padding := blockSize - len(src)%blockSize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(src, padtext...) } func PKCS5UnPadding(src []byte) []byte { length := len(src) unpadding := int(src[length-1]) return src[:(length - unpadding)] }