C#使用RSA加密解密文件

2019年9月8日21:43:39 评论 63

加密代码:

  1. //加密代码,注意会覆盖原文件,里面有我的公钥,你要用时记得覆盖我的公钥
  2.  private bool  encryptFile(string filename)
  3.     {
  4.       FileStream f;
  5.       try
  6.       {
  7.         f = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
  8.       }
  9.       catch
  10.       {
  11.         return false;
  12.       }
  13.       Random r = new Random();
  14.       Thread.Sleep(10*r.Next(3,8));
  15.       RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
  16.       rsa.FromXmlString("<RSAKeyValue><Modulus>w7nNT8U7kwTw8UqLk0lROxmfTRZnQrMH1QrNyUGtoeAJ3w+iH08j+h83cPWxwPoxpXm1cgCLFWtCFWY1rkQDCCLxJhUIwYTbGKTg9h0uUVfNxGiNji7dcHShd01UYpZjHCwOar1wjJD4vJqVJCk++59UUMhE9IUATuSUVpRy1bE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");
  17.       //导入密钥
  18.       byte[] data = new byte[16];
  19.       ArrayList con = new ArrayList();
  20.       while(f.Read(data, 0, 16)!=0)
  21.       {
  22.         byte[] result = rsa.Encrypt(data,false);
  23.         //Thread.Sleep(10 * r.Next(2, 7));
  24.         con.Add(result);
  25.       }
  26.       //加密
  27.       f.Seek(0, SeekOrigin.Begin);
  28.       foreach(byte[] d in con)
  29.       {
  30.         f.Write(d, 0, d.Length);
  31.       }
  32.       f.Close();
  33.       return true;
  34. }

解密代码:

  1. //解密代码,覆盖原文件,返回值表示是否解密成功
  2.  private bool decryptFile(string filename,string key)
  3.     {
  4.       FileStream f;
  5.       try
  6.       {
  7.         f = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
  8.       }
  9.       catch
  10.       {
  11.         return false;
  12.       }
  13.       RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
  14.       try
  15.       {
  16.         rsa.FromXmlString(key);
  17.       }
  18.       catch
  19.       {
  20.         return false;
  21.       }
  22.       byte[] data = new byte[128];
  23.       ArrayList con = new ArrayList();
  24.       while (f.Read(data, 0, 128) != 0)
  25.       {
  26.         byte[] result;
  27.         try
  28.         {
  29.           result = rsa.Decrypt(data, false);
  30.         }
  31.         catch
  32.         {
  33.           return false;
  34.         }
  35.         con.Add(result);
  36.       }
  37.       //解密
  38.       f.SetLength(con.Count * 16);
  39.       f.Seek(0, SeekOrigin.Begin);
  40.       foreach (byte[] d in con)
  41.       {
  42.         f.Write(d, 0, d.Length);
  43.       }
  44.       f.Close();
  45.       return true;
  46. }
weinxin
微信公众号
博客微信公众号,欢迎关注。
不忘初心 牢记使命

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: