字符串的加密与解密(二)

二、可逆加密

以下的几种加密和解密均要添加对System.Security.Cryptography命名空间的引用;

using System.Security.Cryptography;

1、DES

    public class DESDemo
    {
        /// <summary>
        /// 向量
        /// 向量的长度为8位,也就是DES算法的块大小,经本人亲测,若小于8位程序会抛出异常,
        /// 若大于8位,则8位以后的不起作用。
        /// 字节数组里的值可以根据个人需要进行更改
        /// 这个参数也可使用以下方式初始化:
        /// private static byte[] rgbIV = Encoding.ASCII.GetBytes("[email protected]#abc12");
        /// </summary>
        private static byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

        /// <summary>
        /// 使用DES算法加密字符串
        /// </summary>
        /// <param name="strEncrypt">待加密的字符串</param>
        /// <param name="key">密钥,与向量一样必须为8位长度,否则会抛出异常</param>
        /// <returns>加密后的字符串</returns>
        public static string DESEncypt(string strEncrypt, string key)
        {
            if (key.Length != 8)
            {
                throw new Exception("密钥的长度必须为8!");
            }
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            string result = "";
            try
            {
                byte[] rgbKey = Encoding.ASCII.GetBytes(key);
                byte[] inputByteArray = Encoding.UTF8.GetBytes(strEncrypt);
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, des.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                result = Convert.ToBase64String(mStream.ToArray());
                mStream.Close();
                mStream.Dispose();
                cStream.Close();
                cStream.Dispose();
            }
            catch (IOException ex) { throw ex; }
            catch (CryptographicException ex) { throw ex; }
            catch (Exception ex) { throw ex; }
            finally
            {
                des.Clear();
            }
            return result;
        }

        /// <summary>
        /// 使用DES算法解密字符串
        /// </summary>
        /// <param name="strDecrypt">待解密的字符串</param>
        /// <param name="key">密钥,与加密时一致</param>
        /// <returns>解密后的字符串</returns>
        public static string DESDecrypt(string strDecrypt, string key)
        {
            if (key.Length != 8)
            {
                throw new Exception("密钥的长度必须为8!");
            }
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            string result = "";
            try
            {
                byte[] rgbKey = Encoding.ASCII.GetBytes(key);
                byte[] inputBytesArray = Convert.FromBase64String(strDecrypt);
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, des.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputBytesArray, 0, inputBytesArray.Length);
                cStream.FlushFinalBlock();
                result = Encoding.UTF8.GetString(mStream.ToArray());
                mStream.Close();
                mStream.Dispose();
                cStream.Close();
                cStream.Dispose();
            }
            catch (IOException ex) { throw ex; }
            catch (CryptographicException ex) { throw ex; }
            catch (Exception ex) { throw ex; }
            finally
            {
                des.Clear();
            }
            return result;
        }
    }

调用方法:

        static void Main(string[] args)
        {
            Console.WriteLine("请输入要加密的字符串:");
            string s = Console.ReadLine();
            string key = "DeS*#06#";
            string result = DESDemo.DESEncypt(s, key);
            Console.WriteLine("密钥为:{0}", key);
            Console.WriteLine("DES加密后:{0}", result);
            Console.WriteLine("DES解密后:{0}", DESDemo.DESDecrypt(result, key));
            Console.ReadKey();
        }

运行结果如下:

时间: 2024-10-11 12:18:35

字符串的加密与解密(二)的相关文章

字符串的加密与解密

加密过程涉及到四个对象:明文.StreamWriter.CryptoStream.MemoryStream 那么以上四个对象是如何联系起来的呢? MemoryStream是尾,明文是头 整个加密过程完成后,暗文在MemoryStream中. 逆向理解下加密过程...... 1.首先在内存中生存MemoryStream对象: MemoryStream ms = new MemoryStream(); 2.告诉CryptoStream,把加密后的字节流存储到MemoryStream中 上面的"存储&

ASP.NET数据库连接字符串的加密与解密

ASP.NET web.config中,数据库连接字符串的加密与解密. 虽然不怎么新鲜,但相信还是有许多人不知道,好,不说废话,直接给方法:开始--->运行,输入cmd,接着输入以下内容 加密: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "你的Web项目路径" 解密: C:\WINDOWS\Microsoft.NET\Fram

字符串的加密与解密(一)

    前段时间自己琢磨着写个给字符串加密和解密的小程序,在网上找了一些代码,稍做整理,记录如下:     一.不可逆加密     1.MD5     (之前一直以为经过MD5加密是不可逆的,今天在网上竟然找到个网址可以解密,试了一下,真的可以哦!) /// <summary> /// 使用MD5加密字符串 /// </summary> /// <param name="source">待加密的字符串</param> /// <re

C#一个字符串的加密与解密

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.IO;   namespace ConsoleApplication1 {     class Program     {         static string encryptKey = "Oyea";    //

字符串base64加密、解密

//base64加密(字符串经过base64加密之后得到的新的字符串)NSData *data = [@"iOS Developer Tips" dataUsingEncoding:NSUTF8StringEncoding]; NSString *base64Encoded = [data base64EncodedStringWithOptions:0]; //base64解密(base64加密的字符串经过base64解密之后得到的新的字符串) NSData *nsdataDecod

使用Python pyDes和base64模块对字符串进行加密和解密

代码如下: import pyDes import base64 Key = "Gogenius" Iv = "Gogen123" # 加密 def encrypt_str(data):     # 加密方法     method = pyDes.des(Key, pyDes.CBC, Iv, pad=None, padmode=pyDes.PAD_PKCS5)     # 执行加密码     k = method.encrypt(data)     # 转base

常见的加密和解密算法—BASE64

一.BASE64加密和解密概述 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码具有不可读性,

如何对web.config进行加密和解密

在WEB网站开发过程中,如果我们将数据库连接字符串封装到.DLL文件中,将会给数据库和程序的迁移带来麻烦,因为万一服务器地址或者数据库发生变更,那么我们就不得不修改源程序并重新将其编译.更好的解决方法是将数据库连接字符串写入到web.config配置文件中,可问题是将连接字符串写入到web.config文件中之后,任何人都能打开看到所连接的数据库名和密码,又会带来安全隐患,因此为了保证数据库的安全性,我们可以通过使用微软IDE自带的命令aspnet_regiis.exe将配置文件web.conf

常见的加密和解密算法—DES

一.DES加密概述 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来.需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来. DES入口参数 DES算法的入口参数有三个:Key.Data.Mode.其中Key为