我已经看到很多关于OpenSSL和EVP的问题,但没有很多明确的答案,但我想我仍然在这里发布我的问题并希望得到更好的反馈 .
给我的材料是签名文件“symmetrickey.bin”,RSA密钥集“privatekey_A.pem”,“publickey_A.pem”,以及其他用户的公钥“publickey_B.pem” .
我需要做的是:
-
取消签名
symmetrickey.bin
并将其存储到文本文件中 . -
使用
symmetrickey.txt
和某些算法(如AES)加密message.txt
. -
使用
privatekey_A.pem
对加密的消息进行签名并写入文件cipher.bin
. -
之后我需要取消签名并验证
cipher.bin
上的签名 . -
然后使用我们的对称密钥解密消息,然后写入另一个文件 .
我遇到的问题是了解如何实现OpenSSL EVP库 . API页面不是很清楚每个函数的值来自何处 . 例如, EVP_OpenInit()
我在哪里 ek
或 ek
"ekl"的长度? "prvi"是私钥吗?我怎么知道这种类型?这些是我没有给出的东西 .
我看过很多实现,大多数都不回答我的问题,或者他们给出了疯狂的代码,几乎没有解释正在发生什么或 Value 来自何处 . 我作为最后的手段在这里张贴......
1 回答
对于sign / unsign键部分,我需要进一步的信息,这个签名是如何完成的?例如,此签名在文件末尾是否为X字节长度,然后可以轻松删除?
对于列表中的项目2-5,以下代码肯定会有所帮助,它基于openssl文档中的示例,其中包含更多注释和调整以满足您的需求 . 如果您有任何未评论的问题,请随时询问!
crpytor.c
和Makefile:
此代码不使用
EVP_OpenInit()
,因为它仅用于解密,而我的方法(和您的需要)需要加密或解密 . 虽然您可以使用EVP_OpenInit()
来初始化解密上下文,但我用适合加密和解密的两个调用替换了仅适用于解密的单个调用 .从手册页:
EVP_OpenInit()
用于密钥文件如果您引用的签名文件是RSA / DSA或类似格式的公钥文件,则可以使用this StackOverflow question获取比我更好的方法,因为它会自动从文件中提取密钥(并按照您的要求使用
EVP_OpenInit()
)