zoukankan      html  css  js  c++  java
  • 加密解密,CryptoStream()的使用

    一:上图

    二:代码

    主界面代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace StringEncrypt
    {
        public partial class Frm_Main : Form
        {
            public Frm_Main()
            {
                InitializeComponent();
            }
    
            private void btn_Encrypt_Click(object sender, EventArgs e)
            {
                if (txt_password.Text.Length == 4)//判断加密密钥长度是否正确
                {
                    try
                    {
                        txt_EncryptStr.Text = //调用实例ToEncrypt方法得到加密后的字符串
                            new Encrypt().ToEncrypt(
                            txt_password.Text, txt_str.Text);
                        //Encrypt P_Encrypt = new Encrypt();
                        //P_Encrypt.ToEncrypt(""
                    }
                    catch (Exception ex)//捕获异常
                    {
                        MessageBox.Show(ex.Message);//输出异常信息
                    }
                }
                else
                {
                    MessageBox.Show("密钥长度不符!", "提示");//提示用户输入密钥长度不正确
                }
            }
            private void btn_UnEncrypt_Click(object sender, EventArgs e)
            {
                if (txt_password2.Text.Length == 4)//判断加密密钥长度是否正确
                {
                    try
                    {
                        txt_str2.Text = //调用ToDecrypt方法得到解密后的字符串
                            new Encrypt().ToDecrypt(
                            txt_password2.Text, txt_EncryptStr2.Text);
                    }
                    catch (Exception ex)//捕获异常
                    {
                        MessageBox.Show(ex.Message);//输出异常信息
                    }
                }
                else
                {
                    MessageBox.Show("密钥长度不符!", "提示");//提示用户输入密钥长度不正确
                }
            }
        }
    }

    加密解密类代码

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    
    namespace StringEncrypt
    {
        public class Encrypt
        {
            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="encryptKey">密钥</param>
            /// <param name="str">信息</param>
            /// <returns></returns>
            internal string ToEncrypt(string encryptKey, string str)
            {
                try
                {
                    byte[] P_byte_key = //将密钥字符串转换为字节序列
                        Encoding.Unicode.GetBytes(encryptKey);
                    byte[] P_byte_data = //将字符串转换为字节序列
                        Encoding.Unicode.GetBytes(str);
                    MemoryStream P_Stream_MS = //创建内存流对象
                        new MemoryStream();
                    CryptoStream P_CryptStream_Stream = //创建加密流对象
                        new CryptoStream(P_Stream_MS,new DESCryptoServiceProvider().
                       CreateEncryptor(P_byte_key, P_byte_key),CryptoStreamMode.Write);
    
    
    
                    P_CryptStream_Stream.Write(//向加密流中写入字节序列
                        P_byte_data, 0, P_byte_data.Length);
                    P_CryptStream_Stream.FlushFinalBlock();//将数据压入基础流,用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区。
                    byte[] P_bt_temp =//从内存流中获取字节序列
                        P_Stream_MS.ToArray();
                    P_CryptStream_Stream.Close();//关闭加密流
                    P_Stream_MS.Close();//关闭内存流
                    return //方法返回加密后的字符串
                        Convert.ToBase64String(P_bt_temp);
                }
                catch (CryptographicException ce)
                {
                    throw new Exception(ce.Message);
                }
            }
    
            internal string ToDecrypt(string encryptKey, string str)
            {
                try
                {
                    byte[] P_byte_key = //将密钥字符串转换为字节序列
                        Encoding.Unicode.GetBytes(encryptKey);
                    byte[] P_byte_data = //将加密后的字符串转换为字节序列
                        Convert.FromBase64String(str);
                    MemoryStream P_Stream_MS =//创建内存流对象并写入数据
                        new MemoryStream(P_byte_data);
                    CryptoStream P_CryptStream_Stream = //创建加密流对象
                        new CryptoStream(P_Stream_MS,new DESCryptoServiceProvider().
                        CreateDecryptor(P_byte_key, P_byte_key),CryptoStreamMode.Read);
    
                    byte[] P_bt_temp = new byte[200];//创建字节序列对象
    
                    MemoryStream P_MemoryStream_temp =//创建内存流对象
                        new MemoryStream();
                    int i = 0;//创建记数器
                    while ((i = P_CryptStream_Stream.Read(//使用while循环得到解密数据
                        P_bt_temp, 0, P_bt_temp.Length)) > 0)//(1从当前流中读取200个字节-并将它们存储在 P_bt_temp 中 2P_bt_temp 中的字节偏移量-从该偏移量开始存储从当前流中读取的数据 3读入缓冲区中的总字节数)
                    {
                        P_MemoryStream_temp.Write(//将解密后的数据放入内存流
                            P_bt_temp, 0, i);
                    }
                    return //方法返回解密后的字符串
                        Encoding.Unicode.GetString(P_MemoryStream_temp.ToArray());
                }
                catch (CryptographicException ce)
                {
                    throw new Exception(ce.Message);
                }
            }
        }
    }
  • 相关阅读:
    Asp.Net页面导入和导出到EXCEL
    ASP.NET打包安装的制作方法
    asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
    aspx页面Repeater嵌套Repeater
    JAVASCRIPT校验大全
    SQL语句导入导出大全
    从DataView中生成Excel报表的方案
    用ajax实现dropdownlist多级联动实例
    ASP.NET结合存储过程写的通用搜索分页程序
    C#程序调用外部程序
  • 原文地址:https://www.cnblogs.com/hongmaju/p/3739418.html
Copyright © 2011-2022 走看看