问题标签 [cbc-mac]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
329 浏览

php - AES-256-CBC 加密 Golang 和 PHP

我正在尝试在 golang 中实现 AES-256-CBC 加密。我有一个已经使用多年的有效 PHP 代码。我在 Golang 中获取加密值,但是对于相同的有效负载/密钥/iv 组合,这些值与 PHP 的输出不匹配。

为简化起见,我在下面的代码中对有效负载/密钥/iv 进行了硬编码。我还从我的 go 代码中删除了详细的错误消息。

这是我的 GO 代码

我的 Go 输出是

我有一个 PHP 代码来执行相同的任务,这给了我不同的输出。

PHP输出是

显然,我想让我的 Golang 实现获得与 PHP 相同的输出。由于我需要与我的 Golang 代码和现有的 PHP 代码进行通信,因此我希望在 PHP 和 Golang 中进行相同的加密和解密工作。

有任何想法吗?

0 投票
1 回答
45 浏览

c - libgcrypt:CMAC 是一种选择吗?

为项目使用 libgcrypt,使用以下设置打开密码句柄:

根据 libgcrypt 文档:

GCRY_CIPHER_CBC_MAC:计算 CBC-MAC 密钥校验和。这与CBC模式相同,但只输出最后一个块。不能与 GCRY_CIPHER_CBC_CTS 同时使用。

从研究和阅读来看,“CBC_MAC”与 CMAC 不同。但是,如果 libgcrypt 支持 CMAC,我不能完全从文档中获得?有人可以澄清一下 CMAC 是否是 libgcrypt 中的一个选项吗?这里有一个模式列表,没有明确列出 CMAC:

https://www.gnupg.org/documentation/manuals/gcrypt/Available-cipher-modes.html