DES加密解密

news/2025/2/25 18:47:15

自己写的DES加密解密类,加密后生成Base64字符串,并去除'='字符。

加密后替换掉'+',这样加密后的字符串可以作为url参数传递。

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace QuaEdu.Helper
{
    /// <summary>
    /// DES加密/解密类。
    /// 2014年3月15日
    /// </summary>
    public class DESHelper
    {
        #region 默认密钥
        /// <summary>
        /// 默认密钥
        /// </summary>
        private static readonly string m_key = "simpo_s0611163";
        #endregion

        #region ========加密========
        /// <summary> 
        /// 加密数据 
        /// </summary> 
        /// <param name="Text">原文</param> 
        /// <returns>密文</returns> 
        public static string Encrypt(string Text)
        {
            return Encrypt(Text, m_key);
        }

        /// <summary> 
        /// 加密数据 
        /// </summary> 
        /// <param name="Text">原文</param> 
        /// <param name="sKey">密钥</param> 
        /// <returns>密文</returns> 
        public static string Encrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider desKey = new DESCryptoServiceProvider();

            byte[] inputByteArray = Encoding.Default.GetBytes(Text);
            byte[] keyByteArray = Encoding.Default.GetBytes(sKey);

            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            md5.ComputeHash(keyByteArray);

            desKey.Key = HalveByteArray(md5.Hash);
            desKey.IV = HalveByteArray(md5.Hash);

            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, desKey.CreateEncryptor(), CryptoStreamMode.Write);

            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();

            return Convert.ToBase64String(ms.ToArray()).Replace("=", "").Replace("+", "-").Replace("/", "*");
        }
        #endregion

        #region ========解密========
        /// <summary> 
        /// 解密数据 
        /// </summary> 
        /// <param name="Text">密文</param> 
        /// <returns>原文</returns> 
        public static string Decrypt(string Text)
        {
            return Decrypt(Text, m_key);
        }

        /// <summary> 
        /// 解密数据 
        /// </summary> 
        /// <param name="Text">密文</param> 
        /// <param name="sKey">密钥</param> 
        /// <returns>原文</returns> 
        public static string Decrypt(string Text, string sKey)
        {
            StringBuilder sb = new StringBuilder();
            if (Text.Length % 4 != 0)
            {
                for (int i = 0; i < 4 - Text.Length % 4; i++)
                {
                    sb.Append("=");
                }
            }
            Text = Text.Replace("-", "+").Replace("*", "/") + sb.ToString();

            DESCryptoServiceProvider desKey = new DESCryptoServiceProvider();

            byte[] inputByteArray = Convert.FromBase64String(Text);
            byte[] keyByteArray = Encoding.Default.GetBytes(sKey);

            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            md5.ComputeHash(keyByteArray);

            desKey.Key = HalveByteArray(md5.Hash);
            desKey.IV = HalveByteArray(md5.Hash);

            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, desKey.CreateDecryptor(), CryptoStreamMode.Write);

            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();

            return Encoding.Default.GetString(ms.ToArray());
        }
        #endregion

        #region 把字节数组缩短一半
        /// <summary>
        /// 把字节数组缩短一半
        /// </summary>
        private static byte[] HalveByteArray(byte[] data)
        {
            byte[] result = new byte[data.Length / 2];

            for (int i = 0; i < result.Length; i++)
            {
                int x = (data[i * 2] + data[i * 2 + 1]) / 2;
                result[i] = (byte)x;
            }

            return result;
        }
        #endregion

    }
}
View Code

 

转载于:https://www.cnblogs.com/s0611163/p/3601447.html


http://www.niftyadmin.cn/n/712827.html

相关文章

bootstrap下拉选择框选中事件_基于jQuery的select下拉框选择触发事件实例分析

本文实例讲述了基于jQuery的select下拉框选择触发事件实现方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;我一直以来都认为&#xff0c;select 下拉框选择对选项 options 使用 onclick 注册事件即可&#xff0c;如下&#xff1a;选项一选项二今天有个要求需要做联…

麒麟开源堡垒主机在等保上的合规性分析

信息安全等级保护工作包括定级、备案、安全建设和整改、信息安全等级测评、信息安全检查五个阶段。 我国的信息安全等级保护共分为五级&#xff0c;级别越高&#xff0c;要求越严格。 我国的信息安全等级保护主要标准包括&#xff0c;《信息系统等级保护安全设计技术要求&…

CodeForces 6A-Triangle(枚举/暴力)

题目描述&#xff1a; Johnny has a younger sister Anne, who is very clever and smart. As she came home from the kindergarten, she told his brother about the task that her kindergartener asked her to solve. The task was just to construct a triangle out of fo…

纠结的一天 —— 由base64编解码与加号、空格引起

2014年3月14日&#xff0c;星期五&#xff0c; 23点22分 忙碌、焦头烂额、充实而又幸福的一天&#xff01; 写在篇头的话&#xff1a; 许多时候&#xff0c;别人分享的经验&#xff08;成功或失败&#xff09;&#xff0c;个中滋味&#xff0c;听者很难真正体会&#xff0c;直到…

pycharm运行Django项目,提示UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6

确认pycharm编码都是utf-8的情况下&#xff0c;需要修改项目中settings.py DIRS: [ ],默认是空&#xff0c;将路径加入即可解决。 TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR, templates)],APP_DIRS: True,OPTIONS…

机器学习实战 笔记文章链接

声明 《机器学习实战》读书笔记系列是我对在读此书过程中遇到的各种问题、及解决方法的记录和总结。 另外我修改了部分源代码&#xff0c;并添加了注释&#xff0c;希望能够帮助到大家。 文章列表 《机器学习实战》读书笔记1&#xff1a;NumPy的安装及简单用法 《机器学习实…

android select下拉列表_网页前端开发中常用的html控件(二)button和select【208】

补&#xff1a;想了解input和label请参看我写的文【207】点我进入【207】一、button。是按钮标签&#xff0c;也是按钮标签&#xff0c;它们之间的区别就是button更加强大&#xff0c;它除了可以包含文本之外&#xff0c;还可以包含格式化的文本和图像&#xff0c;这就是它的强…

mysql 结束符报错_数据库之mysql篇(6)—— mysql常用函数函数/自定义函数

常用函数运算函数我相信你都能看懂&#xff0c;所以以上的不再做过多解释然后还有个&#xff0c;前面漏掉的between and:意指10是否在0到20之间&#xff0c;如果是返回1&#xff0c;否则返回0日期函数这个要稍微注意一下参数&#xff0c;第一个是起始日期&#xff0c;interval是…