Cryptography 是否应该为该任务使用加密消息语法(CMS)?

Cryptography 是否应该为该任务使用加密消息语法(CMS)?,cryptography,openssl,encryption-asymmetric,encryption-symmetric,Cryptography,Openssl,Encryption Asymmetric,Encryption Symmetric,我的任务是在桌面应用程序和移动设备之间传输小型二进制消息(1或2kb长)。消息应该进行非对称加密(例如RSA)。根据我所学到的,应该使用混合密码系统来完成这类任务: 生成随机对称密钥 使用对称密钥加密纯文本(例如使用AES) 用公钥加密对称密钥 传输密文和加密的对称密钥 我不想发明自己的格式来存储密文和加密的对称密钥。所以我无意中发现了CMS标准(加密消息语法)。乍一看,它和我需要的一模一样。如果我正确理解了标准,它将嵌入密文和加密的对称密钥以及有关所用算法的信息 谁能说一个人是否应该使用CMS

我的任务是在桌面应用程序和移动设备之间传输小型二进制消息(1或2kb长)。消息应该进行非对称加密(例如RSA)。根据我所学到的,应该使用混合密码系统来完成这类任务:

  • 生成随机对称密钥
  • 使用对称密钥加密纯文本(例如使用AES)
  • 用公钥加密对称密钥
  • 传输密文和加密的对称密钥
  • 我不想发明自己的格式来存储密文和加密的对称密钥。所以我无意中发现了CMS标准(加密消息语法)。乍一看,它和我需要的一模一样。如果我正确理解了标准,它将嵌入密文和加密的对称密钥以及有关所用算法的信息

    谁能说一个人是否应该使用CMS标准来完成概述的任务?OpenSSL的CMS支持是否足以满足我的需要


    干杯,Christian

    CMS绝对支持您正在寻找的操作序列。另一方面,CMS格式本身和它的OpenSSL API都相当复杂

    一个小问题是CMS主要使用X.509证书而不是公钥。您可以在您的系统中通过实际推出PKI或仅使用自签名证书(基本上等同于传递裸RSA密钥,但具有作为绑定密钥和元数据的通用格式的优势,这有时非常有用)


    OpenSSL几乎没有CMSAPI的文档;我能找到的最好的参考是OpenSSL源代码发行版的apps/目录中的cms.c;代码的结构是一个1000行的主函数,这有点令人不安,但它确实使用公钥执行加密,因此您可以将其作为指南。

    同时,我使用OpenSSL实现了CMS。它就像一个charme。下面是
    opensslcms
    文档:。使用BouncyCastle的Java示例代码: