RSA编码的数据是否可交换

时间:2011-10-28 17:27:46

标签: cryptography cross-platform rsa

到目前为止,我认为如果我有RSA加密数据,由于常用的算法,这些数据很容易在大多数平台(.net,java,pc,unix ..)之间交换。

通过调查我的另一个questions,我现在感到困惑。我甚至发现了MS实现之间的差异(某些提供者反转了生成的字节数组)。此外,填充似乎不遵循标准化。

如果RSA编码的数据相对简单可交换(有一些明显的陷阱)或者这是一个令人头痛的问题,那么具有跨平台加密技术经验的人是否可以发表声明?

2 个答案:

答案 0 :(得分:3)

请注意,RSA加密通常不会单独使用,而是in combination with a symmetric encryption algorithm。 因此,为了确保可互操作,您需要确保:

  • 双方对RSA使用相同的填充方案(例如,最初在PKCS#1 v1.5或OAEP中定义的方案)。 (这并不意味着填充必须是确定性的,只是解密器知道解密文本的哪些位是填充的,哪些是原始消息)。
  • 双方对其邮件使用相同的格式(例如PKCS#7 or its successors中的格式)。
  • 双方使用相同的对称算法(例如AES-128),操作模式(例如CBC)和分组密码填充方案(例如PKCS#5-padding)。
  • 加密方必须使用与解密方使用的私钥对应的公钥。

答案 1 :(得分:2)

您的问题的简单答案是否定的,加密算法本身并未指定如何在实现之间存储或传输字节以确保互操作性。为此,您必须使用标准格式或协议,将这些指令提供到位级别。例如,在Paulo回答他谈到PKCS#7和PKCS#1。这些依赖于ASN.1的DER编码规则,这些规则准确地指定了如何将RSA的大整数片段转换为不重要的字节序列并再次返回。