网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

NotNET中加密和解密的实现方法二

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12

  使用私有密钥解密该文档,这是唯一可以解密的密钥,并且没有通过网络传递。
  
  不对称算法比对称算法计算的花费多、速度慢。因此我们不希望在线对话中使用不对称算法加密所有信息。相反,我们使用对称算法。下面的例子中我们使用不对称加密来加密对称密钥。接着就使用对称算法加密了。实际上安全接口层(SSL)建立服务器和浏览器之间的安全对话使用的就是这种工作方式。
  
  示例是一个TCP程序,分为服务器端和客户端。服务器端的工作流程是:
  
  从客户端接收公共密钥。
  
  使用公共密钥加密未来使用的对称密钥。
  
  将加密了的对称密钥发送给客户端。
  
  给客户端发送使用该对称密钥加密的信息。
  
  代码如下:
  
  namespace com.billdawson.crypto
  {
  public class CryptoServer
  {
  private const int RSA_KEY_SIZE_BITS = 1024;
  private const int RSA_KEY_SIZE_BYTES = 252;
  private const int TDES_KEY_SIZE_BITS = 192;
  
  public static void Main(string args)
  {
  int port;
  string msg;
  TcpListener listener;
  TcpClient client;
  SymmetricAlgorithm symm;
  RSACryptoServiceProvider rsa;
  //获取端口
  try
  {
  port = Int32.Parse(args[0]);
  msg = args;
  }
  catch
  {
  Console.WriteLine(USAGE);
  return;
  }
  //建立监听
  try
  {
  listener = new TcpListener(port);
  listener.Start();
  Console.WriteLine("Listening on port {0}",port);
  
  client = listener.AcceptTcpClient();
  Console.WriteLine("connection.");
  }
  catch (Exception e)
  {
  Console.WriteLine(e.Message);
  Console.WriteLine(e.StackTrace);
  return;
  }
  
  try
  {
  rsa = new RSACryptoServiceProvider();
  rsa.KeySize = RSA_KEY_SIZE_BITS;
  
  // 获取客户端公共密钥
  rsa.ImportParameters(getClientPublicKey(client));
  
  symm = new TripleDESCryptoServiceProvider();
  symm.KeySize = TDES_KEY_SIZE_BITS;
  
  //使用客户端的公共密钥加密对称密钥并发送给客。
  encryptAndSendSymmetricKey(client, rsa, symm);
  
  //使用对称密钥加密信息并发送
  encryptAndSendSecretMessage(client, symm, msg);
  }
  catch (Exception e)
  {
  Console.WriteLine(e.Message);
  Console.WriteLine(e.StackTrace);
  }
  finally
  {
  try
  {
  client.Close();
  listener.Stop();
  }
  catch
  {
  //错误
  }
  Console.WriteLine("Server exiting");
  }
  }
  
  private static RSAParameters getClientPublicKey(TcpClient client)
  {
  // 从字节流获取串行化的公共密钥,通过串并转换写入类的实例
  byte buffer = new byte[RSA_KEY_SIZE_BYTES];
  NetworkStream ns = client.GetStream();
  MemoryStream ms = new MemoryStream();
  BinaryFormatter bf = new BinaryFormatter();
  RSAParameters result;
  
  int len = 0;
  int totalLen = 0;

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号