熊蓋站 - 首頁

  Plurk Twitter    

» 您尚未 登入註冊 | 說明 | 娛樂中心 | 點歌 | 聊天留言 | 最新 | 精華 | 論壇 | 資訊 | 首頁 | 影音模式

熊蓋站  -> 軟體分享  -> ~~web.config信息及RSA加密方式!经验之谈~~

--> 本頁主題: ~~web.config信息及RSA加密方式!经验之谈~~ 加為IE收藏 | 收藏主題 | 上一主題 | 下一主題 | 可列印版本
yeng84



∷ 職務: 普通會員 該美女目前不在線
∷ 編號: 2803
∷ 級別: 路人甲
∷ 發帖: 2
∷ 威望: 2
∷ 財富: 1311 蓋幣
∷ 貢獻: 0
∷ 配偶: 單身
∷ 家族: 無門無派
∷ 註冊: 2005-06-29
∷ 上次: 2005-06-29
※警告:(0)鮮花(0)
你還沒寵物,趕快去買一隻吧
寵物商店
  【字體: Plurk Twitter 
【本站推薦】:
 ~~web.config信息及RSA加密方式!经验之谈~~

~~web.config信息及RSA加密方式!经验之谈~~

web.config信息及RSA加密方式!
 
  我们都知道web.config可以保存连接字符串,我们在程序中也都是这么做的,web.config是XML,所以它有清晰的结构,是我们很容易可以读懂它,但是这也出现一个问题,我们数据库完全暴露给浏览该文件的人,这是我们所不希望的。我们可以使用一个简单有效的加密算法来加密这段连接字符,使直接浏览该文件的人不能清楚地看到这些信息。
  我们一般以下面的形式保存连接字符串:
  <appSettings>
  <add key="ConnectionString" value="server=localhost;database=mydb;pwd=sa;uid=sa;" />
  </appSettings>
  为了我们自己可以看得明白这些加密的字符我们需要一个额外的程序专门生成这些加密数据(这个额外的程序你可以写得很复杂但是为了说明问题,我们使用简单的base64编码数据,这其实不是加密数据,但是原理是一样的)。下面用来生成明文到密文的(base64)转换,如果使用其它的加密算法可以替换这个加密过程
 
  byte[] data = System.Text.ASCIIEncoding.ASCII.GetBytes(this.textBox1.Text);
  string encrystr = Convert.ToBase64String(data);
 
  encrystr就是变码以后的字符。我们可以将我们web.config里面的连接字符("server=localhost;database=mydb;pwd=sa;uid=sa;")取出来放在这个程序里面执行生成一个新的字符串(c2VydmVyPWxvY2FsaG9zdDtkYXRhYmFzZT10ZXN0O3B3ZD1zYTt1aWQ9c2E71)。
  之后我们用这个字符替换未编码的字符串。如下所示:
  <appSettings>
  <add key="ConnectionString" value="c2VydmVyPWxvY2FsaG9zdDtkYXRhYmFzZT10ZXN0O3B3ZD1zYTt1aWQ9c2E7" />
  </appSettings>
  同样在我们的程序里面也需要解密,最后就是在程序中如何使用了,我们的程序需要理解这个字符串的意义,我们在数据访问层里面添加如下的解密方法
  string strconn = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
  byte[] data = Convert.FromBase64String(strconn);
  string strReal = System.Text.ASCIIEncoding.ASCII.GetString(data);
 
  这样就可以得到真实的连接字符串了。
  上文一个简单的加密(伪加密,其实本文实现的是一个编码而非加密)的方法,也许可以骗过一些人的眼睛,但是对于了解内幕的人还是起不到什么保护的作用,所以你可以扩展这个算法,使用对称或者非对称的加密算法替换该案例里面的编码算法,这样基本上就万无一失了。
 
 
  下面介绍如何使用非对称RSA加密的方法:
 
  加密:
 
  <%@ Page language="c#" AutoEventWireup="false"%>
  <%@ Import Namespace= "System.Security.Cryptography" %>
  <%@ Import Namespace= "System.IO" %>
  <%@ Import Namespace= "System.Text" %>
 
  <%
  string word = Request.Params["word"];
  if(word == null){
  Response.Write("没有输入密码啦!!!");
  return;
  }
 
  StreamReader sr = new StreamReader(@"f:\a.txt",UTF8Encoding.UTF8);
  string readpublickey = sr.ReadToEnd();
  sr.Close();
 
  RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();
  UTF8Encoding enc=new UTF8Encoding();
  byte[] bytes=enc.GetBytes(word);
  crypt.FromXmlString( readpublickey );
  bytes = crypt.Encrypt( bytes,false );
  string encryttext=Convert.ToBase64String(bytes);
  string abb = Server.UrlEncode(encryttext);
  Response.Write(abb);
 
  Response.Write("<a href='take.aspx?word=" + encryttext + "'>" + encryttext + @"</a>");
  %>
 
  解密:
 
  <%@ Page language="c#" AutoEventWireup="false"%>
  <%@ Import Namespace= "System.Security.Cryptography" %>
  <%@ Import Namespace= "System.IO" %>
  <%@ Import Namespace= "System.Text" %>
 
  <%
  string word = Request.QueryString["word"];
  if(word == null){
  Response.Write("没有传来密码啦!!!");
  return;
  }
 
  StreamReader sr = new StreamReader(@"f:\b.txt",UTF8Encoding.UTF8);
  string readprivatekey = sr.ReadToEnd();
  sr.Close();
 
  Response.Write("<br>" + word);
 
  RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();
  UTF8Encoding enc=new UTF8Encoding();
  byte[] bytes = Convert.FromBase64String(@word);
  crypt.FromXmlString ( readprivatekey ) ;
  byte[] decryptbyte = crypt.Decrypt( bytes,false );
  string decrypttext=enc.GetString( decryptbyte );
 
  Response.Write(decrypttext);
 
  %>
 
  公匙在a.txt文件中,私匙在b.txt文件中.
 
  制造公匙和私匙的方法如下:
 
  crypt=new RSACryptoServiceProvider();
  publickey=crypt.ToXmlString(false);//公匙
  privatekey=crypt.ToXmlString(true);//私匙
  crypt.Clear();
 
  //写入文本文件中
  StreamWriter one=new StreamWriter(@"f:\a.txt",true,UTF8Encoding.UTF8);
  one.Write(publickey);
  StreamWriter two=new StreamWriter(@"f:\b.txt",true,UTF8Encoding.UTF8);
  two.Write(privatekey);
  one.Flush();
  two.Flush();
  one.Close();
  two.Close();
  MessageBox.Show("成功保存公匙和密匙!");
 
  小弟目前选用的是时代互联 http://now.net.cn/host/vps.net的专用C型空间,是支持ASP ASP.NET+SQL SERVER2000数据库。对于他们的空间我也无话可说了。从2003年就开始使用了,中间也没有出现过什么问题,速度也挺快的。后来偶尔听朋友说有时候打开速度有点儿慢。纳闷,后来才得知我们网站是放着电信机房,而他用得是网通上网,出现了网间访问速度偏慢的问题。耶,想着郁闷呀。。。
 
  在这里郁闷的时节里,突然接到时代互联的电话,说他们公司在2005年1月份时,推出 Global CDN全球网络镜像及加速引擎,可以完全避免这种“网间互联瓶颈”的问题。抱着一丝的惊喜,一娄的怀疑做了个测试,果然效果不言而喻呀。
  对这个感兴趣的朋友可以进他们网站看看 http://www.now.net.cn/host/ ,大家去申请试用一下,还有大家要点他们的镜象站点试试速度哦!! 我就不多说啦。



  小弟还推荐一款商务C型的空间,也不错!!

  商务C型主机+.CN 1600 元/年,免费加送CDN网站加速器500独立空间,支持ASP/ASP.NET免费送800Mb邮箱Win2003,IIS 6.0,支持50M SQLSERVER 2000ACCESS 数据库提供计数器,留言板脚本列表 ASP ASP.NET ActivePerl CGIASP.NET 1.1 Microsoft Front Page 2000 扩展

呵,需要的老哥就不要犹豫,想试用就点击:http://now.net.cn/host/commerce.net


※ ※ ※ 本文為 yeng84 個人意見分享,與本站立場無關!※ ※ ※
[樓 主] |
發表於:2005-06-29 07:28

  熊蓋站 -> 軟體分享

v 最新文章        熊蓋站為自由討論論壇,所有個人行為或言論不代表本站立場。文章內容如有涉及侵權請聯絡我們,將立即刪除相關文章資料        v 精華文章

               

奇摩搜尋
完全比對 模糊比對

線上收看: 景點即時影像 | 線上查詢: 火車時刻表最上方

    Powered by 熊蓋站  Code © 2005-2017 Plurk Twitter 
讀取秒數Time 0.011063 second(s),query:4 Gzip enabled
   現在時間是 2024-11-30 17:33