2010-01-27 49 views
0

我们已经通过我们的java程序生成了RSA公钥,以便在传输它之前对C++中的数据进行加密,但是当我们使用此密钥使用Microsoft加密API加密数据时,它不接受这个密钥。由Java程序生成的加密密钥未被Microsoft加密API接受

对此有没有人有任何想法?

+0

也许M $ API需要二进制键,你给它的关键是base64编码的密钥块。或者反之亦然。它给出的错误信息是什么? – amphetamachine 2010-01-27 07:19:09

+0

寻求帮助的最佳机会是向我们展示一个完整的示例 - 包括数据 - 未能接受密钥的代码。 – 2010-01-27 19:14:12

回答

1

Microsoft代码对于可以使用的RSA密钥有一些内在的限制:它要求公钥长度(模数位长度)是16的倍数,并且公开的指数必须适合32位无符号整数。

但是,大多数RSA密钥都符合这些约束条件,而通常的嫌疑人是编码/解码问题。 Java倾向于在任何地方使用big-endian,因为:

  • 这就是基于ASN.1的编码规则要求的;
  • Java来自Sun,长期处理big-endian硬件(68020,Sparc)。

另一方面,微软的CryptoAPI需要小端。您可能以错误的顺序使用了公共模数。

0

根据我的经验,RSA密钥的序列化在Java和MS之间是不同的。

但是,我所做的是使用Bouncy Castle API来做到这一点,因为他们有一个Java和.NET版本的库。

更多的选择,你可以看看这个问题: RSA: How to generate private key in java and use it in C#?