Golang:如何使用 DES、CBC 和 PKCS7 解密?

2024-01-08

目前正在尝试找出为什么我的解密方法不起作用。我使用 DES、CBC 和 PKCS7Padding 来加密我的字符串。我现在的code https://play.golang.org/p/FZN6POxqU8输出panic: crypto/cipher: input not full blocks解密期间。


伙计,工作完全没问题。

package main

    import (
        "bytes"
        "crypto/des"
        "crypto/cipher"
        "fmt"
    )

    func DesEncryption(key, iv, plainText []byte) ([]byte, error) {

        block, err := des.NewCipher(key)

        if err != nil {
            return nil, err
        }

        blockSize := block.BlockSize()
        origData := PKCS5Padding(plainText, blockSize)
        blockMode := cipher.NewCBCEncrypter(block, iv)
        cryted := make([]byte, len(origData))
        blockMode.CryptBlocks(cryted, origData)
        return cryted, nil
    }

    func DesDecryption(key, iv, cipherText []byte) ([]byte, error) {

        block, err := des.NewCipher(key)

        if err != nil {
            return nil, err
        }

        blockMode := cipher.NewCBCDecrypter(block, iv)
        origData := make([]byte, len(cipherText))
        blockMode.CryptBlocks(origData, cipherText)
        origData = PKCS5UnPadding(origData)
        return origData, nil
    }

    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)]
    }


    func main() {
        originalText := "sysys"
        fmt.Println(originalText)
        mytext := []byte(originalText)

        key := []byte{0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC }
        iv := []byte{0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC }


        cryptoText,_ := DesEncryption(key, iv, mytext)
        fmt.Println(string(cryptoText))
        decryptedText,_ := DesDecryption(key, iv, cryptoText)
        fmt.Println(string(decryptedText))

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang:如何使用 DES、CBC 和 PKCS7 解密? 的相关文章

  • Go 中的切片分块

    我有一个切片 其中包含约 210 万条日志字符串 我想创建一个切片切片 其中字符串尽可能均匀分布 这是我到目前为止所拥有的 logs is a slice with 2 1 million strings in it var divided
  • 无需时间即可生成随机字符串?

    我知道如何使用 Runes 和播种 rand Init 在 go 中生成随机字符串time UnixNano 我的问题是 是否可以 使用 stdlib 在不使用当前时间戳 安全 的情况下播种 rand 此外 我问 因为仅仅依靠时间来为敏感操
  • ReverseProxy取决于golang中的request.Body

    我想构建一个 http 反向代理 它检查 HTTP 主体 然后将 HTTP 请求发送到它的上游服务器 你怎么能在 Go 中做到这一点 初始尝试 如下 失败 因为 ReverseProxy 复制传入请求 修改它并发送 但正文已被读取 func
  • Golang 优雅地关闭 HTTP 服务器并进行错误处理

    我正在让我的 HTTP 服务器正常关闭 我从帖子中获取了提示here https stackoverflow com questions 39320025 how to stop http listenandserve 并且到目前为止已经像
  • 如何在 Visual Studio Code 中使用 Delve 调试器进行远程调试

    我已经问过了 得到了很好的答复answer https stackoverflow com questions 39058823 how to use delve debugger in visual studio code用于使用 del
  • 我想在后端验证来自 golang 前端的时区

    前端在注册期间发送时区以及其他用户详细信息 我需要在时区上放置一个验证器来进行 api 测试 时区数据的格式为 GMT 10 00 Hawaii GMT 08 00 Pacific Time US amp Canada 我所做的是定义数组中
  • 从 []byte 到 char*

    我想包装一个 C 函数 它需要一个char 指向非空字节缓冲区 的第一个元素 我正在尝试使用 CGo 将其包装在 Go 函数中 以便我可以将其传递给 byte 但我不知道如何进行转换 C 函数签名的简化版本是 void foo char c
  • 检查值是否实现接口的说明

    我读过 Effective Go 和其他类似这样的问答 golang接口合规性编译类型检查 https stackoverflow com questions 17994519 golang interface compliance com
  • 当涉及多个渠道时,select 如何工作?

    我发现在多个非缓冲通道上使用 select 时 例如 select case lt chana case lt chanb 即使两个通道都有数据 但在处理此选择时 case chana 和 case chanb 的跟注不平衡 package
  • 为什么结构中“[0]byte”的位置很重要?

    0 byte在golang中不应该占用任何内存空间 但这两个结构体的大小不同 type bar2 struct A int 0 byte type bar3 struct 0 byte A int 那么为什么这个位置 0 byte这里重要吗
  • 如何在 Go 应用程序中处理打开/关闭数据库连接?

    我的 Web API 应用程序中有一组函数 他们对 Postgres 数据库中的数据执行一些操作 func CreateUser db err sql Open postgres user postgres password passwor
  • GoQt 致命错误:QAbstractAnimation:没有这样的文件或目录

    我尝试编译 Qt 来开发桌面应用程序 我按照 Qt 网站上的官方 wiki 指南的说明进行操作 当我尝试go run示例文件夹中的示例 我收到错误 去运行 home pinkya rabbit workspace go1programs s
  • GOPATH值设置

    我用go1 3 1 windows amd64 msi安装go 安装后GOROOT是默认设置 我发现 D Programs Go bin 在 PATH 中 然后我创建一个 GOPATH 环境变量 使用 go get 命令时 出现错误 软件包
  • 有没有办法在 VSCode 中保存时运行 go 测试,并将其输出到终端?

    现在我有几个项目在VSCode中运行 运行起来相当繁琐go test每次我编写新代码时 我宁愿立即看看我是否破坏了某些东西 我知道在 Javascript 中我可以在每次保存文件时运行测试 并将输出发送到终端 现在我正在使用 保存时运行 h
  • 如何将UTC时间转换为unix时间戳

    我正在寻找将 UTC 时间字符串转换为 unix 时间戳的选项 我的字符串变量是02 28 2016 10 03 46 PM并且需要将其转换为 unix 时间戳 例如1456693426 知道该怎么做吗 首先 unix时间戳14566934
  • 鸭子在 Go 中打字

    我想写一个Join函数接受任意对象String 方法 package main import fmt strings type myint int func i myint String string return fmt Sprintf
  • 在javascript中创建图像的缩略图方块(不丢失纵横比)

    我正在制作一个客户端拖放文件上传脚本作为书签 在上传之前 我使用 File API 将图像读取为 base64 格式并将其显示为缩略图 This is how my thumbnails look like I want them to l
  • 如何将 SQLite 数据库捆绑到 Go 二进制文件中?

    我尝试使用 go bindata 和 packr 但这些包没有显示如何将 SQLite 数据库文件打包到二进制文件中 我不需要以任何方式更新数据库 我只想在启动时从中读取数据 如何将 SQLite 数据库文件嵌入到 Go 二进制文件中 SQ
  • “go.tools”的权限被拒绝错误

    当我尝试安装 go 工具时 我的权限被拒绝 usr local go pkg tool linux amd64 cover 我可以接受 因为它是 usr local 目录及需求root使用权 但我的第一个疑问是为什么当我设置时它试图安装在这
  • 直接从一个通道发送到另一个通道

    当从一个通道直接发送到另一个通道时 我偶然发现了令人惊讶的行为 package main import fmt func main my chan make chan string chan of chans make chan chan

随机推荐

  • JavaScript 中类型化数组的优点是它们在 C 中的工作方式相同或相似吗?

    我一直在玩类型化数组 https developer mozilla org en US docs JavaScript typed arrays在 JavaScript 中 var buffer new ArrayBuffer 16 va
  • Windows Azure Active Directory 应用程序中的“登录 URL”是什么?

    我已经在 Windows Azure Active Directory 中配置了我的第一个应用程序 一切正常 我可以使用目录中的帐户登录 但是 我还不完全清楚所有概念 尤其是登录网址 工具提示说 用户可以登录并使用您的应用程序的 URL 您
  • 有没有办法在Java中嵌入浏览器? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有办法在Java中嵌入浏览器 更具体地说 是否有一个可以模拟浏览器的库 从 JavaFX 2 0 开始 您现在可以使用webvie
  • Java 中未处理的异常

    我目前正在学习如何正确执行自定义异常 我偶然发现了一个问题 每当我尝试使用抛出此自定义异常的类的对象时 我的 IDE 调试器 我使用的是 IntelliJ idea 会显示 未处理的异常 InsertExceptionName 代码以简化的
  • 在不活动的情况下以编程方式停止 AWS EC2

    当开发环境中没有活动 例如 2 小时不活动后 时 我们是否可以停止开发环境的 AWS Windows Server EC2 实例 我无法确定是否有任何用户虚拟连接到服务器 我可以轻松地以编程方式在固定时间启动 停止 EC2 但为了降低服务器
  • 如何在堆栈上分配具有灵活数组成员的结构

    假设我们有一个以灵活数组成员结尾的结构 struct foo size t len uint8 t data 如何在堆栈上分配这个结构 即内存在作用域结束时自动释放 另外 如果len可以包含字段的大小data 目前 我做的事情如下 uint
  • 为什么 if [ ...某事... ];然后回显“退出状态是$?”总是发出 0?

    在 bash 中输出退出状态的正确方法是什么 据我所知 退出状态由 对应于最后执行的命令的状态 正在处理的脚本对作为参数提供的文件进行一些条件检查 例如 检查是否有任何文件被命名或文件是否存在 所以我有这样的条件语句 if eq 0 the
  • Kotlin 高阶函数组合

    我试图弄清楚如何在 Kotlin 中将一个函数声明性地定义为其他两个函数的组合 但我正在努力 这是我的代码 fun compose a Int Int gt Int b Int Int gt Int Int return a invoke
  • 如何从带有 url 的网页读取 Open Graph 和元标记

    我希望我的网站能够在用户将链接粘贴到邮箱时提取有关网页的信息 类似于 Facebook 我想知道像 Google Reddit 和 Facebook 这样的网站如何能够仅通过 URL 来检索缩略图 标题和描述 有人知道他们是如何做到这一点的
  • WordPress 表单未提交

    您好 我对 WordPress 非常陌生 根据我的要求 我在 WordPress 主题中创建了几个 php 文件 其中detailsform php包含
  • 如何通过 MongoDB PHP 中的嵌入项查找文档

    我在 MongoDB 中有下一个文档 竞赛文件 id ObjectId 502aa915f50138d76d11112f7 contestname Contest1 description java programming contest
  • JavaScript 可以连接 MySQL 吗?

    JavaScript 可以连接 MySQL 吗 如果是这样 怎么办 如果没有某种桥接器 客户端 JavaScript 无法访问 MySQL 但上面关于 JavaScript 只是一种客户端语言的大胆说法是不正确的 JavaScript 可以
  • Android:GridLayout 大小和 View.GONE 行为

    I want to make a GridLayout that when one of it s children s Visibility is set to GONE it is replaced by the next child
  • 将变量传递给 JavaScript 对象

    你能帮我解决我的问题吗 我有以下 JavaScript 对象 var data rows 0 name foshka rows 0 tel 096 rows 0 opt none 问题是我在尝试将变量作为行索引传递时收到错误 var i 0
  • 如何在 PowerShell 中获取数字 HTTP 状态代码

    我知道有一个几个好方法 http scriptolog blogspot com 2007 08 query http status codes and headers html在 PowerShell 中构建 Web 客户端 NET 类
  • 如何在 GEKKO GUI 中显示解决方案?

    我想探索 GEKKO Web GUI 用于可视化结果的功能 如中所述https www researchgate net publication 326740143 GEKKO optimization suite https www re
  • 为什么 Darwin 的 strtod 线程不安全?

    以下测试总是在我的 Intel Mac Mini 上产生故障或总线错误 编译器 uname a Darwin vogon13 9 8 0 Darwin Kernel Version 9 8 0 Wed Jul 15 16 55 01 PDT
  • 用 C++ 构建最小的 VST3 主机

    我正在努力寻找有关如何使用 VST 3 x SDK 设置最小插件主机的基本示例 官方文档绝对是简明扼要的 我无法得到任何地方 我想 了解最小的设置 所需的标头 要实现的接口 加载 VST3 插件 暂时没有花哨的 GUI 打印出一些数据 例如
  • gitignore 无法与 Visual Studio 一起使用

    我正在尝试将我的项目更改从使用 Visual Studio 2017 的 C 项目提交并推送到我的私有 gitea 存储库 不幸的是 构建输出 如 bin debug 以及 VS 缓存文件夹 vs 始终被添加到更改列表中 当我输入 git
  • Golang:如何使用 DES、CBC 和 PKCS7 解密?

    目前正在尝试找出为什么我的解密方法不起作用 我使用 DES CBC 和 PKCS7Padding 来加密我的字符串 我现在的code https play golang org p FZN6POxqU8输出panic crypto ciph