欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#使用RSA加密解密文件

程序员文章站 2023-11-14 23:40:16
本文实例为大家分享了c#使用rsa加密解密文件的具体代码,供大家参考,具体内容如下 加密代码: //加密代码,注意会覆盖原文件,里面有我的公钥,你要用时记得覆盖...

本文实例为大家分享了c#使用rsa加密解密文件的具体代码,供大家参考,具体内容如下

加密代码:

//加密代码,注意会覆盖原文件,里面有我的公钥,你要用时记得覆盖我的公钥
 private bool  encryptfile(string filename)
    {
      filestream f;
      try
      {
        f = new filestream(filename, filemode.open, fileaccess.readwrite, fileshare.read);
      }
      catch
      {
        return false;
      }
      random r = new random();
      thread.sleep(10*r.next(3,8));
      rsacryptoserviceprovider rsa = new rsacryptoserviceprovider(1024);
      rsa.fromxmlstring("<rsakeyvalue><modulus>w7nnt8u7kwtw8uqlk0lroxmftrznqrmh1qrnyugtoeaj3w+ih08j+h83cpwxwpoxpxm1cgclfwtcfwy1rkqdcclxjhuiwytbgktg9h0uuvfnxginji7dchshd01uypzjhcwoar1wjjd4vjqvjck++59uumhe9iuatusuvpry1be=</modulus><exponent>aqab</exponent></rsakeyvalue>");
      //导入密钥
      byte[] data = new byte[16];
      arraylist con = new arraylist();
      while(f.read(data, 0, 16)!=0)
      {

        byte[] result = rsa.encrypt(data,false);
        //thread.sleep(10 * r.next(2, 7));
        con.add(result);
      }
      //加密
      f.seek(0, seekorigin.begin);
      foreach(byte[] d in con)
      {
        f.write(d, 0, d.length);
      }

      f.close();
      return true;
}

解密代码:

//解密代码,覆盖原文件,返回值表示是否解密成功
 private bool decryptfile(string filename,string key)
    {
      filestream f;
      try
      {
        f = new filestream(filename, filemode.open, fileaccess.readwrite, fileshare.read);
      }
      catch
      {
        return false;
      }
      rsacryptoserviceprovider rsa = new rsacryptoserviceprovider(1024);
      try
      {
        rsa.fromxmlstring(key);
      }
      catch
      {
        return false;
      }

      byte[] data = new byte[128];
      arraylist con = new arraylist();
      while (f.read(data, 0, 128) != 0)
      {
        byte[] result;
        try
        {
          result = rsa.decrypt(data, false);
        }
        catch
        {
          return false;
        }
        con.add(result);
      }
      //解密
      f.setlength(con.count * 16);
      f.seek(0, seekorigin.begin);
      foreach (byte[] d in con)
      {
        f.write(d, 0, d.length);
      }
      f.close();
      return true;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。