C#使用RSA加密解密文件

该博客主要讲述了在C#中运用RSA算法进行文件的加解密操作,涉及信息技术领域的后端开发和数据安全相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//加密代码,注意会覆盖原文件,里面有我的公钥,你要用时记得覆盖我的公钥
 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;
        }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值