RSA使用public key加密,用private key解密(簽名相反,使用private key簽名,用public key驗證簽名)。好比我跟合做方D之間的數據傳輸,我使用D提供給個人public key進行加密後,傳給D,他使用他的private key解密後獲得原文;response時,D使用我提供給他的public key加密,我收到後使用個人private key解密獲得原文。一個經常使用的場景是兩方之間的數據傳輸使用AES加密,再把AES的密鑰經過RSA加密後一併傳輸。(AES的性能高過RSA)。css
關於密鑰的生成,Linux下經常使用OpenSSL生成,也能夠使用特定語言平臺所提供的方法生成。java
也能夠使用OpenSSL.NET生成,這是一個OpenSSL在.net上的實現。裏邊有個cli 項目能夠在命令行下運行,他生成的應該和linux下使用OpenSSL生成的一致的。python
然並卵,每一個平臺語言之間的RSA密鑰不能通用,c#生成的java,python上用不了,OpenSSL生成的C#裏用不了,異常信息:不正確的提供程序版本linux
若是使用OpenSSL生成的密鑰,在.net中使用OpenSSL.NET加密解密是個不錯的選擇。另外一個辦法就是把密鑰轉換成各自語言所需的格式,好比這個http://csslab.s3.amazonaws.com/csslabs/Siva/opensslkey.csgit
能夠把OpenSSL Key轉換成c#須要的xml格式,這樣就能夠直接使用.net framework裏的方法進行RSA加密解密了。github
有時候合做方給你的可能不是一個public key,而一個cert證書文件,這就須要從這個證書裏提取出public key了web