当前位置: 代码迷 >> C# >> 自带的RSA加密,怎么实现用私钥加密数据
  详细解决方案

自带的RSA加密,怎么实现用私钥加密数据

热度:662   发布时间:2016-04-28 08:39:58.0
自带的RSA加密,如何实现用私钥加密数据?
c#新手,现在要搞一个rsa加密组件给asp用(asp其实还是很牛逼),本来asp里是用的JavaScript类库,浏览器里面执行加密解密消耗时间忽略不计,到asp里却要4秒多钟。没办法,然后想过用php的rsa加密,搜了一下感觉太复杂,还要安装各种各样的东西。。昨天搜了一下发现.net framework里面的很多组件asp里面其实是可以直接用的,然后就想出了用c#开发组件然后给asp用,今天就把这个功能给实现了。

已经能够实现C#公钥加密数据,私钥解密数据,asp调用正常,浏览器和服务器交互正常。用的是System.Security.Cryptography.RSACryptoServiceProvider,这货是干嘛的不清楚,反正能够实现rsa算法。但是这货却只提供了公钥加密数据,私钥解密数据。

场景:
服务器持有私钥,客户持有公钥,只有一套密钥。

1、客户发送数据用公钥加密,然后服务器私钥解密。
2、服务器用私钥加密数据,然后客户用公钥解密。

很合理的逻辑。

那么问题来了,第1条C#用RSACryptoServiceProvider就能实现,第2条就没辙了,RSACryptoServiceProvider如何用私钥加密数据?

不可能把私钥发给客户,也不要两套密钥增加复杂性,尽量用自带的api,很久没来csdn发求助帖了,希望能有个好的解决方案
------解决思路----------------------
私钥只能用来解密和做数字签名吧,用私钥加密数据,所有公钥都能解,有何安全性。两方传输安全应该走ssl吧
------解决思路----------------------
我想知道,你客户端是怎么加密解密的,用javascript吗?要是浏览器屏蔽js执行呢。可以用AcviveX组建,但这要设置浏览器,允许下载、执行才行。你的需求可以考虑https协议,SSL证书
------解决思路----------------------
.net 的 RSA 不支持私钥加密,只支持公钥加密。你需要搜一下使用c#的其它实现,很多的。
------解决思路----------------------
引用:
好像就是要这样,密钥一个客户对应一个,公钥私钥其实都长的一样,客户发数据公钥加密一下,服务器发数据私钥加密一下,反一下也可以,客户要是泄露打死他,这样会安全点点吗

我指的安全是说,当你的客户不只一个时候,他们都将有你发布的公钥,场景1客户加密,你解密当然没问题,问题出在场景2,当你用你的私钥加密私密的回扣信息给客户A的时候,客户B恰巧也拿到了这份信息,客户B用它的公钥轻松地解开了你给客户A的秘密信息,结果发现你给他的回扣要比给客户A的少了很多,于是客户B一不做二不休,把你的信息发给客户C,D,E,客户CDE一看,大惊,随即客户BCDE把你堵在办公室里讨要回扣的差额。大致就是这么一个悲惨的故事。
------解决思路----------------------
引用:
...
场景:
服务器持有私钥,客户持有公钥,只有一套密钥。

1、客户发送数据用公钥加密,然后服务器私钥解密。
2、服务器用私钥加密数据,然后客户用公钥解密。

很合理的逻辑。
...


一、
如果只有一个客户可以‘持有公钥’,那么就没有‘非对称’加密的优点了。完全可以用更快速的对称加密。
如果允许多个客户可以‘持有公钥’,那么”服务器用私钥加密的数据“,就有多个客户可以解密
因此不难理解,为什么在Dotnet里面,不支持”服务器用私钥加密数据,然后客户用公钥解密“。

二、
RSA一般不用来直接加密数据,因为a)明文的长度必须小于密码长度,b)RSA的计算量比较大。
一般RSA是用来加密一个‘传输密码’的,然后客户和服务端用‘传输密码’进行对称加密。

比如:
a) 客户发送数据(密码)用公钥加密,然后服务器私钥解密得到会话 密码。(客户由此验证服务端,因为只有服务端才有私钥)
b) 双方使用‘会话 密码’开始安全通讯。
c) 在完全通讯中客户发送‘用户名/密码等’进行验证,(服务端由此验证客户端,因为只有客户才拥有它的用户名/密码等)
d) 由此开始保密通讯...

三、
不需要搞一个”rsa加密组件给asp用“。启用IIS的SSL,并要求站点使用SSL就可以了。


  相关解决方案