dsgwoh7038 2017-01-05 17:11
浏览 145
已采纳

Golang:如何使用DES和CBC加密5个字符长的纯文本?

Currently trying to encrypt plaintext that is 5 characters long into a 12 character encrypted string. I want to be able to specify a unique IV (not randomly generated), a unique key, and use DES. My current code requires the plaintext to be 8 characters long (5 character name plus 3 spaces).

  • 写回答

1条回答 默认 最新

  • doujiaoang69440 2017-01-06 05:43
    关注

    I have already faced this problem. This is because of padding issue. The code you wanted is a

    Code link You Can test it at go playground.

      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)]
      }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记