Cryptography RSA编码的数据可交换吗

Cryptography RSA编码的数据可交换吗,cryptography,cross-platform,rsa,Cryptography,Cross Platform,Rsa,到目前为止,我认为如果我有RSA加密的数据,由于常用的算法,这些数据将很容易在大多数平台(.net、java、pc、unix..)之间交换 通过调查我的另一个朋友,我现在很困惑。我甚至发现了MS实现之间的差异(一些提供程序会反转生成的字节数组)。此外,填充似乎没有遵循标准化 如果RSA编码的数据是相对简单的可交换数据(存在一些明显的缺陷),或者如果这是一个令人头痛的问题,那么具有跨平台加密经验的人能否给出一个陈述?请注意,RSA加密通常不单独使用,而是单独使用。 因此,为了确保互操作性,您需要确

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

通过调查我的另一个朋友,我现在很困惑。我甚至发现了MS实现之间的差异(一些提供程序会反转生成的字节数组)。此外,填充似乎没有遵循标准化


如果RSA编码的数据是相对简单的可交换数据(存在一些明显的缺陷),或者如果这是一个令人头痛的问题,那么具有跨平台加密经验的人能否给出一个陈述?

请注意,RSA加密通常不单独使用,而是单独使用。 因此,为了确保互操作性,您需要确保:

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

    • 您的问题的简单答案是否定的,加密算法本身没有指定如何在实现之间存储或传输字节以确保互操作性。为此,您必须使用标准格式或协议,将这些指令下至位级别。例如,在保罗的回答中,他谈到了PKCS#7和PKCS#1。这些反过来又依赖于ASN.1的DER编码规则,该规则精确地指定了如何将RSA的大整数片段转换为一个明确的字节序列,然后再转换回来。

      您正在交换的是未加密形式的可移植数据吗?由于编码、CR/LF约定、制表符处理等原因,即使是纯文本文件也会让你头疼。@larsmans:这个问题更需要理解。很明显,未加密的数据可能会导致平台问题。但直到现在,我认为如果RSA.Decrypt(b)在另一个系统上完成,至少RSA.Encrypt(a)=b和RSA.Decrypt(b)=a。好的,HCL,只是检查一下。我想我应该在问这样一个noob过滤器问题之前发现你的9500+代表,很抱歉。实际上,对于非对称加密,填充不能是确定性的,否则可以对明文进行彻底搜索。使用RSA对相同的数据加密两次会产生两个不同的字节字符串,这是正常的,而且是可以预期的(但在解密后,填充可以被明确地删除)。