我有一件简单的事情要做:我想使用AES algorythm和pem文件中包含的密钥加密数据,如页面所示:http://msdn.microsoft.com/en-us/library/sb7w85t6.aspx
在此示例中,每次运行该函数时都会创建一个新的加密密钥。 但我需要从pem文件或xml文件中读取此密钥,但我找不到办法。
是否有一种简单的方法从pem文件读取密钥并将其转换为字节数组(byte [])?
我正在使用C# - .net Framework 3.5,文件中的密钥是我们合作伙伴的RSA公钥。
答案 0 :(得分:8)
RSA密钥是什么类型的XML文件?
.Net的RSACryptoServiceProvider
类可以使用FromXmlString
方法从XML读取公钥,格式如下:
<RSAKeyValue>
<Modulus>3EgNS5XumwoQYU4uvr2OTtlZ4YJWUcGqTAVLQPtzejB7JSiETGdveuH7jGRFi2lNqruRL+SGpr6KJvvijG7wOQheIsJC48lDnS692pZH3rDcWgGuqjwssFKhJ5GSu3Tetrf4DOKVOeTaG5cU0pATV6aDU0Npy0a+5vkU5e3+5jE=</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
据我了解您的程序,您使用RSA公钥作为AES对称密钥。 不要这样做!它增加了安全的假象而没有采取任何措施来保护您的数据。作为类比,它就像发送保险箱及其钥匙一样,但首先将钥匙放在粉红色的盒子里。如果你这样做,任何获得 public RSA密钥的人都能够解密你的数据;私有RSA密钥根本不会被使用。
如果第三方强迫您以这种方式执行此操作,请向他们展示此答案,或者询问任何半身像的密码学家。
您应该做的是创建随机AES密钥,使用RSA公钥对其进行加密,然后将加密密钥与加密数据一起发送。这样,只有拥有私有 RSA密钥的人才能读取数据,因为其他任何人都无法解密对称AES密钥。