C# 加密解密

RSA:
    //待加密的明文
        string originText;
        //公钥
        string publicKey;

        byte[] cryp_byte;
        RSACryptoServiceProvider rsaReceive = new RSACryptoServiceProvider();
        RSACryptoServiceProvider rsaSend = new RSACryptoServiceProvider();

        加密:
            originText ="???";
            //接收方先生成公钥, 并将此公钥公开
            //参数false 表示只生成公钥, 如果为true, 则同时生成公钥和私钥.
            publicKey = rsaReceive.ToXmlString(false);
            //发送方接收公钥, 并用此公钥加密数据
            rsaSend.FromXmlString(publicKey);
            //发送方执行加密.
            //第二个参数指示是否使用OAEP, 如果使用, 则程序必须运行在Windows XP 及以上版本的
            //系统中. 无论true 或false, 解密时必须跟加密时的选择相同.
            cryp_byte= rsaSend.Encrypt(System.Text.Encoding.UTF8.GetBytes(originText), false);
            data_encyp.Text = Encoding.Default.GetString(cryp_byte);
            //接收方用自己的私钥解密
         解密:
            byte[] b_OriginText = rsaReceive.Decrypt(cryp_byte, false);


SHA_1做hash:
    HashAlgorithm sha1_hash=HashAlgorithm.Create();
    byte[] hash_byte=sha1_hash.ComputeHash(byte[] bytes);


AES对称加密(C#实现类Rijndael):

    加密:
        //获取实例
        Rijndael ser_rjdcrypt = Rijndael.Create();
        //内存流
        MemoryStream encryptStream = new MemoryStream();
        //加密流
            CryptoStream csWrite = new CryptoStream(encryptStream, ser_rjdcrypt.CreateEncryptor(), CryptoStreamMode.Write);
        //读写流
            StreamWriter sw = new StreamWriter(csWrite);

            sw.WriteLine(str_temp);
            sw.Flush();
        //填充末端并且象内存流写入清空加密流
            csWrite.FlushFinalBlock();

             Byte[] sendbuffer = new Byte[encryptStream.Length];
             encryptStream.Position = 0;
             encryptStream.Read(sendbuffer, 0, (int)encryptStream.Length);

               String msg=BitConverter.ToString(sendbuffer);
   
    解密:
                String[] lt_rvstr_msg = msg.Split('-');
                Byte[] lt_rvbyte_msg = new Byte[lt_rvstr_msg.Length];
                for (int index = 0; index < lt_rvstr_msg.Length; index++)
                {
                    lt_rvbyte_msg[index] = byte.Parse(lt_rvstr_msg[index], System.Globalization.NumberStyles.HexNumber);
                }
        //-----------------------------------------------------------------------//
                MemoryStream decryptStream = new MemoryStream();
                CryptoStream decStream = new CryptoStream(decryptStream, ser_rjdcrypt.CreateDecryptor(), CryptoStreamMode.Write);
                try
                {
                    decStream.Write(lt_rvbyte_msg, 0, lt_rvbyte_msg.Length);
                    decStream.FlushFinalBlock();
                    decryptByte = decryptStream.ToArray();
                }
                catch (Exception err)
                {   }
                Byte[] zh_dec_byte = new Byte[decryptByte.Length - 2];
                for (int i = 0; i < decryptByte.Length - 2; i++)
                {
                    zh_dec_byte[i] = decryptByte[i];
                }
                String yuanwen= Encoding.Default.GetString(zh_dec_byte));



     另一个例子:
        private void but_enc_Click(object sender, EventArgs e)
          {
          
            String str_temp = this.tx_enc.Text;
            tx_jieguo.AppendText("加密前:"+BitConverter.ToString(Encoding.Default.GetBytes(str_temp))+"/n");
        
            MemoryStream encryptStream = new MemoryStream();
            CryptoStream csWrite = new CryptoStream(encryptStream, cli_rjdcrypt.CreateEncryptor(), CryptoStreamMode.Write);
            StreamWriter sw = new StreamWriter(csWrite);
            sw.WriteLine(str_temp);
            sw.Flush();
            csWrite.FlushFinalBlock();
            sendBuffer = new Byte[encryptStream.Length];
            encryptStream.Position = 0;
            encryptStream.Read(sendBuffer, 0, (int)encryptStream.Length);
            tx_jieguo.AppendText("加密后:"+BitConverter.ToString(sendBuffer) + "/n");

          
        }

        private void but_dec_Click(object sender, EventArgs e)
        {        

            Rijndael dec_rjdcrypt = Rijndael.Create();
            dec_rjdcrypt.Key = cli_rjdcrypt.Key;
            dec_rjdcrypt.IV = cli_rjdcrypt.IV;

            MemoryStream   decryptStream = new MemoryStream();
            CryptoStream decStream = new CryptoStream(decryptStream, dec_rjdcrypt.CreateDecryptor(), CryptoStreamMode.Write);
            try
            {
                decStream.Write(sendBuffer, 0, sendBuffer.Length);
                decStream.FlushFinalBlock();
                decryptByte = decryptStream.ToArray();
            }
            catch(Exception err)
            {

            }

            tx_jieguo.AppendText("解密后:"+BitConverter.ToString(decryptByte) + "/n");

            Byte[] zh_dec_byte = new Byte[decryptByte.Length - 2];
            for (int i = 0; i < decryptByte.Length - 2;i++ )
            {
                zh_dec_byte[i] = decryptByte[i];
            }
           
            int i_length = decryptByte.Length;

           
            tx_jieguo.AppendText("恢复:" + Encoding.Default.GetString(decryptByte)+ "/n");
          
         }
    AES文件加密解密:
      
        Rijndael crypt=Rijndel.create();
        private void cmdWriteFile_click()
        {
            ICryptoTransform transform=crypt.CreateEncryptor();
            FileStream fs=new FileStream("c://testfile.bin",FileMode.Create);
 
            CryptoSteam cs=new CryptoStream(fs,transform,CryptoStreamMode.Write);
            StreamWriter w=new StreamWriter(cs);
            w.Write(txt.Text);
            w.flush();
            cs.flushFinalBlock();

            w.close;

        }
        Private void cmdReadFile_click()
        {
            ICryptoTransform transform=crypt.CreateEncryptor();
            FileStream fs=new FileStream("c://testfile.bin",FileMode.Open);
 
            CryptoSteam cs=new CryptoStream(fs,transform,CryptoStreamMode.Read);
            StreamRead wr=new StreamRead(cs);
            String text=r.ReadToEnd();   
            r.close();
        }





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值