0

我正在设计一种加密方案来将文件发送到嵌入式设备。开发人员可以通过共享公钥登录,因此使用相同的密钥加密/解密发送给它的文件是有意义的。文件只由开发者打包,所以这个公钥永远不会被泄露。

发送的文件只需要足够安全以使其难以解密,而不是任何 NSA 质量或任何东西。

我可以使用这样的东西加密/解密:

cat file | openssl [-d] aes-256-cbc -kfile path/to/public/key > outfile.aes

这很好用,除了我想在服务器代码中执行此操作。我可以掏出钱,但我宁愿用代码来做。

我从密钥中获取了 base64 数据,但是当我对其进行解码时,我得到了一个 279 字节的数组,但我需要一个 256 位密钥(32 字节)。

openssl 究竟对密钥文件做了什么,我如何在代码中模拟它?

我试过man openssl了,但我没有发现任何有用的东西。

如果这很重要,我会在 Go 中执行此操作。

4

1 回答 1

1

OpenSSL 使用特定的密钥派生函数从给出的“密码”计算密钥。这个函数被称为EVP_BytesToKey。它是 OpenSSL API 的一部分,因此如果您可以调用 C/C++ 函数,则可以直接使用它。否则,还有其他可用的实现(实际上实现起来并不难,我创建了一个面向对象的 Java 版本)。

如果你不介意的话,我会让你自己在 stackoverflow 上搜索这个算法:)

于 2012-12-14T23:35:14.340 回答