记录新项目中遇到的技术及自己忘记的技术点【DES加密解密,MD5加密,字符串压缩、解压,字符串截取等操作】

一、DES加密、解密

#region DES加密解密
        /// <summary>
        /// 进行DES加密
        /// </summary>
        /// <param name="pToEncrypt">要加密的字符串</param>
        /// <param name="sKey">密钥,必须为8位</param>
        /// <returns>以Base64格式返回的加密字符串</returns>
        public static string EncryptDES(string pToEncrypt, string sKey)
        {
            string key = MD5Encrypt(sKey);
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            {
                byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);
                des.Key = ASCIIEncoding.ASCII.GetBytes(key.Substring(8, 8));
                des.IV = ASCIIEncoding.ASCII.GetBytes(key.Substring(0, 8));
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    cs.Close();
                }
                //byte[] b = ms.ToArray();
                string str = Convert.ToBase64String(ms.ToArray());//System.Text.Encoding.UTF8.GetString(b, 0, b.Length);
                ms.Close();
                return str;
            }
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="pToDecrypt"></param>
        /// <param name="sKey"></param>
        /// <returns></returns>
        public static string DecryptDES(string pToDecrypt, string sKey)
        {
            byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);//Encoding.UTF8.GetBytes(pToDecrypt);
            string key = MD5Encrypt(sKey);
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            {
                des.Key = ASCIIEncoding.ASCII.GetBytes(key.Substring(8, 8));
                des.IV = ASCIIEncoding.ASCII.GetBytes(key.Substring(0, 8));
                MemoryStream ms = new MemoryStream();
                using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    cs.Close();
                }
                string str = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
                return str;
            }
        }
        #endregion

二、MD5加密(16位)

#region MD5加密
        /// <summary>
        /// 给一个字符串进行MD5加密
        /// </summary>
        /// <param name="strText">待加密字符串</param>
        /// <returns>加密后的16位字符串</returns>
        private static string MD5Encrypt(string inputStr)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(inputStr)), 4, 8);
            t2 = t2.Replace("-", "");
            t2 = t2.ToLower();
            return t2;
        }
        #endregion

三、字符串的压缩、解压

#region 字符串压缩
        /// <summary>
        /// 字符串压缩
        /// </summary>
        /// <returns>The string.</returns>
        /// <param name="str">String.</param>
        public static string CompressString(string str)
        {
            string compressString = string.Empty;
            byte[] compressBeforeByte = Encoding.UTF8.GetBytes(str);
            byte[] compressAfterByte = Compress(compressBeforeByte);
            compressString = Convert.ToBase64String(compressAfterByte);
            return compressString;
        }

        /// <summary>
        /// 字符串解压缩
        /// </summary>
        /// <returns>The string.</returns>
        /// <param name="str">String.</param>
        public static string DecompressString(string str)
        {
            string compressString = string.Empty;
            byte[] compressBeforeByte = Convert.FromBase64String(str);
            byte[] compressAfterByte = Decompress(compressBeforeByte);
            compressString = Encoding.UTF8.GetString(compressAfterByte);
            return compressString;
        }

        /// <summary>
        /// 字节数组压缩
        /// </summary>
        /// <param name="strSource"></param>
        /// <returns></returns>
        private static byte[] Compress(byte[] data)
        {
            try
            {
                MemoryStream ms = new MemoryStream();
                GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true);
                zip.Write(data, 0, data.Length);
                zip.Close();
                byte[] buffer = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(buffer, 0, buffer.Length);
                ms.Close();
                return buffer;

            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 字节数组解压缩
        /// </summary>
        /// <param name="strSource"></param>
        /// <returns></returns>
        private static byte[] Decompress(byte[] data)
        {
            try
            {
                MemoryStream ms = new MemoryStream(data);
                GZipStream zip = new GZipStream(ms, CompressionMode.Decompress, true);
                MemoryStream msreader = new MemoryStream();
                byte[] buffer = new byte[0x1000];
                while (true)
                {
                    int reader = zip.Read(buffer, 0, buffer.Length);
                    if (reader <= 0)
                    {
                        break;
                    }
                    msreader.Write(buffer, 0, reader);
                }
                zip.Close();
                ms.Close();
                msreader.Position = 0;
                buffer = msreader.ToArray();
                msreader.Close();
                return buffer;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        #endregion

四、去掉\0

读取到的数据是“iAGAB8PHUpugMAAA==\0\0\0\0\0\0...\0\0”,在转成字符串以后不会看见\0,但是它还会存在,会影响后续的操作。因为我每个字符串的结尾肯定是“=”,只是不确定会有几个,所以只要从开始截取到最后一个“=”,就能得到我需要的数据。

string str = "2235=465876=68865845=2512436";
Console.WriteLine(str.Substring(0,str.LastIndexOf(‘=‘)+1));//注意+1

原文地址:https://www.cnblogs.com/wsn1203/p/9341207.html

时间: 2024-10-09 20:21:11

记录新项目中遇到的技术及自己忘记的技术点【DES加密解密,MD5加密,字符串压缩、解压,字符串截取等操作】的相关文章

准备在新项目中使用pgsql

pgsql大象数据库 是我最近在关注的一款开源数据库,可以自由修改,没那么多限制,准备在新项目中使用 http://blog.163.com/[email protected]/blog/static/16387704020141229159715/

Asp.net MVC 4新项目中创建area的后续操作

Asp.net MVC 4新项目中创建area后,往往HomeController与area的HomeController路由发生混淆,需要手工设置一些地方避免mvc无法识别默认路由的状况. 无废话具体步骤: 1. 检查早Global.asax和\App_Start\RouteConfig.cs中是否已经自动添加了AreaRegistration.RegisterAllAreas();如不存在,进入第2步,否则第3步 2. 在\App_Start\RouteConfig.cs中,添加AreaRe

记录某项目中的踩坑与解决(持续更新)

前言 最近参加了某个比赛, 我所选的赛题就是个类似知乎这样的安卓app,由于着手近一个月了,踩了不少坑,之前没怎么记录,估计事后也会忘记干净. 因此特开一帖,在此记录下相关的坑. 记录 写完某个Recyclerview的item布局和相关适配器后, 然后展示的时候, 发现显示出来的Item数量小于List中绑定的数据量: 首先是检查了一遍适配器中的逻辑,发现没啥问题.然后在onCreateViewHolder中打log,发现只创建了两次就没了(而实际应该创建6次). 最后百度才发现是外面的Scr

php中des加密解密&#160;匹配C#des加密解密&#160;对称加密

原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数  可以用于C#和php通信 对数据进行加密,其中$key 是加密密钥,$iv 是偏移量,默认偏移量和加密密匙是一样的, <?php class DES { var $key; var $iv; //偏移量 function DES( $key, $iv=0) { //key长度8例如:1234abcd $this->key = $key; if( $iv

C#中使用7Z进行压缩解压

SevenZipSharp相关文档下载地址: http://sevenzipsharp.codeplex.com/releases/view/51254 1. 解决方案中添加引用:SevenZipSharp.dll2. 复制粘贴两个dll文件:7z.dll 7z64.dll,并将属性“复制到输出目录”修改为“如果较新则复制” //测试压缩 var zip = new SevenZipCompressor(); zip.CompressionLevel=CompressionLevel.High;

一个利用静态代码分析检查并记录开源项目中存在的隐患的网站

www.viva64.com/en/examples/ 他山之石可以攻玉.不仅可以看看都有哪些常见的地雷,还可以练练英文.

Linux中的压缩解压命令小记

压缩:tar -cf new.tar data.txt 解压:tar -xf new.tar -C tmp/    ---->前提是tmp要先存在,这样才可以把解压后的文件放入这个tmp目录下面 压缩:gzip data.txt  (gzip只能压缩文件而不能压缩目录,压缩后以后缀名.gz存在,原先的文件将被覆盖) 解压:gzip -d data.txt.gz 压缩:bzip2 data.txt(也只能压缩文件,以.bz2存在) 解压:bzip2 -d data.txt.bz2 压缩:xz da

换新项目的痛与乐

在offshore项目待了一年多,终于申请上了国内项目,来之前一直觉得国内项目好,锻炼人,但是任何事情都有痛与乐,今天就聊聊在一个新项目上的痛苦与快乐. 痛苦 全新技术栈.技术上,国内项目没有offshore项目与时俱进,基本上全是Java技术栈,分前端,后端,Devops几种角色(只是开发方面).作为一名自称后端程序员,熟悉掌握Java基础是最重要的,但一年多没碰过Java的我,在这方面还是显得力不从心. 出差.国内项目上的出差机会还是很多的.当时申请上国内项目的时候也申请去北京出差,来之前觉

ckeditor编辑器在java项目中配置

一.基本使用: 1.所需文件架包 A. Ckeditor基本文件包,比如:ckeditor_3.6.2.zip 下载地址:http://ckeditor.com/download 2.配置使用 A.将下载下来的CKEditor压缩解压,将解压后的文件夹("ckeditor")拷贝进项目里面,比如我是放在"WebContent"的"commons"文件夹下: B.在需要使用CKEditor的页面引入CKEditor的支持javascript <