我需要一个运行在我的Linux服务器上的C++程序,通过RSA加密消息与我的C#应用程序进行通信。 C#的部分很容易通过RSACryptoServiceProvider
但它仅支持XML格式的按键,例如:C++ RSA使用XML密钥加密/解密
私钥
<RSAKeyValue>
<Modulus>jhU5nGfGNopA6bHb6nxqTj3/AvPsyZnep6BTSMFyCZLtP4VRu9a/xFaYH6M6SBSf8Aod8Ljjz5aWtet9DPujC1tdG2AmDpkn/6TiUShYbYFNueB25IJoGmNfZdJl3XEWQS0pdrq0wqwgFG4GE3l8gMV6Y/gEnqBx/HZmZOv4JlbkTaQX6KIB8Sxc1zqiAQDV1uTHORG9d6Rh/Rrrv+XntGbKfx75cqU2Q6Ie+o7QoXBSkiRUgb7VlP3NlwBW9VQ03rENpovHhwLvqHbOlV90HPbl0d/JUqmBPTRLe+P+iCLPt76WE1k2Nb9mQzs8fbJ+jrfXtSqSUieeG9B+uz7pxw==</Modulus>
<Exponent>EQ==</Exponent>
<P>qP5inK0zFPNqViqpu1dTIrvtD2Ep29YKlnDdnYEwlRjf0VCn/IMfC4lMggOvqmh7FifwJ+GYo+9PLY6pDo5+EAjE1Lna1GRFyrd3smO9scUbAf0Zq2eqhsJjbVBdBQFX2LnARBhpVvevF7wrMpvCYhC6KmhzGrjfmhadDSSfmnU=</P>
<Q>1zv1p5pWfN3208zp7lIDJPmLa5tO+LEMUsKg4qPFjUif2uI1++HWFCjT6OS9PS48FXv2xdWA/P3jOTw7DSK7SJX5HVBl6T6QV87jkqUtyYFxLAAVxRpGGDy6f+lVs+NyTjmQ7s2zk+Qm7DzGiUoe6BeMU0jXr/KZ4WmvOiy908s=</Q>
<DP>T4bE/m+fkWN9Vbm5SRoJAUlgf7VA3+xBN7ykhlrpr5M8JkQS0S6lMpr208V/17iyZMeAEsSEEOkWM45trH9KYeYCRf0brz4+9fv8F7Z3YrcbxLNXX7hQP2qJJGINqAChz2Z4mIP1Vho0R2eb25SXta2EyKmflBrDk85oBi9aKpE=</DP>
<DQ>S/cLaFSW/uTttCo0cjsQKyrl6b5YG4nIHTWiMd9y5pIaTUDHwk+0+A5o6Mkzuz1+nivAgg8ed2iqjKvYmzlvRsuFGWerf39+PRvX2Wd5kmnrtS003CdkCI3neHB4mdfN/X26rqL0FhRJ+QZkMHSDYPlAld15TShyi8ryjQC7d+0=</DQ>
<InverseQ>d7/VKPzww1KBb0Q6AR8xJrQrbUi1ayVrhB1UQC3K/T1o5xGaEUpkTM+DmPDYi4WMQxhDaalu8II0y1tHMsmZsFy05+VLg8c8BSE9Qn0qOgLxBBYHYqh96kGQqglV1n8s76EHxNZ0aMgpEmipoenqyYgMInCGp5rmmaFeU8hxqsM=</InverseQ>
<D>GRLN7myqghhlzuMmzwbllVY8D5R1FISQtCtZ/cfI1INXCzWlAwfHfQA49oY3diHB3xDYG2vr93Tta2XKxg5J8vIBXy8VxldDSzs2/0Na5iXgijarkbyo9ZkQ1bu3n4xtVsu8BeS2fLT2mjGImgZhQ+adILNMG/4yO5xsbCmkQwACmf5Shdci2G8nGGjCadLNyamzGcChk9y69mbl0Awx4XQUZ888a9PHv1Mfxvbs48ZSKgrV54aQ0lESJAT7Zl8XzwzIoxxNCiYGFRPrGMkr6ZpcrRAPrFzcoYt6C65XlUvhjBNNvLBJiFZco7KeOOiu5ObTplSqww+rwRdVEq9SCQ==</D>
</RSAKeyValue>
公钥
<RSAKeyValue>
<Modulus>jhU5nGfGNopA6bHb6nxqTj3/AvPsyZnep6BTSMFyCZLtP4VRu9a/xFaYH6M6SBSf8Aod8Ljjz5aWtet9DPujC1tdG2AmDpkn/6TiUShYbYFNueB25IJoGmNfZdJl3XEWQS0pdrq0wqwgFG4GE3l8gMV6Y/gEnqBx/HZmZOv4JlbkTaQX6KIB8Sxc1zqiAQDV1uTHORG9d6Rh/Rrrv+XntGbKfx75cqU2Q6Ie+o7QoXBSkiRUgb7VlP3NlwBW9VQ03rENpovHhwLvqHbOlV90HPbl0d/JUqmBPTRLe+P+iCLPt76WE1k2Nb9mQzs8fbJ+jrfXtSqSUieeG9B+uz7pxw==</Modulus>
<Exponent>EQ==</Exponent>
</RSAKeyValue>
因此我需要一个C++ (gcc)RSA加密库,支持这些密钥并在Linux上运行。我发现one library,但它似乎使用了一个非常特殊的标准,其中密钥长度是以数字而不是位来衡量的,它的唯一区别是指数,而C#标准的指数是两个密钥中的相同值。
任何人都知道我可以使用的图书馆吗?
FWIW,用于私钥的格式通常不重要,因为只有该应用程序才会使用它。公钥是其他人通常用来发送加密邮件的所有人。私人钥匙应该保持......私密。 –
这对x-late来说看起来并不难。 XML令牌是补救措施,内容看起来不过是实际位的bas64。任何合理的XML DOM应该能够读取这些,加密库的base64解码器(或者你自己的或第三方)应该能够解码base64,并且从那里它只是在你的lib的正确位置加载权利blob。所以你正在寻找一些已经为你做的事情?我发现很难(但并非不可能,知道MS)相信.NET不能导出到PEM,在这种情况下,任何加密库都会在本地进行。 – WhozCraig
crypto ++是我以前用过的很好的库。 http://www.cryptopp.com/ –