DESEncrypt.cs

//=====================================================================================
// All Rights Reserved , Copyright@ UBT 2016
//===================================================================================== using System;
using System.Configuration;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions; namespace UBT.Encrypt.Tools
{
/// <summary>
/// 版 本:2.0
/// 创 建:zhangpeng
/// 日 期:2017-04-26 14:41
/// 描 述:DES 加密、解密帮助类,加入深度加解密算法
/// </summary>
public class DESEncrypt
{
/// <summary>
/// 密钥,必须8位
/// </summary>
private static readonly string StrKey = string.IsNullOrEmpty(ConfigurationManager.AppSettings["Key"]) ? "MJShanxi" : ConfigurationManager.AppSettings["Key"];
/// <summary>
/// 源字符串
/// </summary>
private static readonly string SourceStr = string.IsNullOrEmpty(ConfigurationManager.AppSettings["SourceStr"]) ? "s" : ConfigurationManager.AppSettings["SourceStr"];
/// <summary>
/// 替换字符串
/// </summary>
private static readonly string ReplaceStr = string.IsNullOrEmpty(ConfigurationManager.AppSettings["ReplaceStr"]) ? "mjshanxi" : ConfigurationManager.AppSettings["ReplaceStr"]; #region DES加密
/// <summary>
/// DES加密
/// </summary>
/// <param name="text">要加密的字符串</param>
/// <returns>以Base64格式返回的加密字符串</returns>
public static string Encrypt(string text)
{
return Encrypt(text, StrKey);
}
/// <summary>
/// DES加密
/// </summary>
/// <param name="text">要加密的字符串</param>
/// <param name="sKey">密钥,且必须8位</param>
/// <returns>以Base64格式返回的加密字符串</returns>
public static string Encrypt(string text, string sKey)
{
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
byte[] inputByteArray;
inputByteArray = Encoding.UTF8.GetBytes(text);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
string str = Convert.ToBase64String(ms.ToArray());
ms.Close();
return str;
} } } #endregion #region DES解密
/// <summary>
/// DES解密
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static string Decrypt(string text)
{
if (!string.IsNullOrEmpty(text))
{
return Decrypt(text, StrKey);
}
else
{
return "";
}
}
/// <summary>
/// 解密数据
/// </summary>
/// <param name="text">要解密的以Base64</param>
/// <param name="sKey">密钥,且必须为8位</param>
/// <returns>已解密的字符串</returns>
public static string Decrypt(string text, string sKey)
{
if (text.Contains("Password"))//如果包含Password,表示没有加密
{
return text;
} //确信当前字符串,是加密字符串
if ((text.Length % ) != )//因为加密后是base64,所以用4来求余进行验证
{
return text;
} byte[] inputByteArray = Convert.FromBase64String(text); using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
return Encoding.UTF8.GetString(ms.ToArray());
} } #endregion #region 深度加密
/// <summary>
/// 深度加密
/// </summary>
/// <param name="pToEncrypt">要加密的字符串</param>
/// <param name="sKey">密钥,且必须8位</param>
/// <returns>以Base64格式返回的深度加密字符串</returns>
public static string DepthEncrypt(string pToEncrypt, string sKey)
{
//一级加密
string yetEncryStr = Encrypt(pToEncrypt, sKey);
//二级加密
string secondEncryStr = Regex.Replace(yetEncryStr, SourceStr, ReplaceStr); return secondEncryStr;
} /// <summary>
/// 深度加密
/// </summary>
/// <param name="pToEncrypt">要加密的字符串</param>
/// <returns>以Base64格式返回的深度加密字符串</returns>
public static string DepthEncrypt(string pToEncrypt)
{
//一级加密
string yetEncryStr = Encrypt(pToEncrypt, StrKey);
//二级加密
string secondEncryStr = Regex.Replace(yetEncryStr, SourceStr, ReplaceStr); return secondEncryStr;
} #endregion #region 深度解密
/// <summary>
/// 深度解密
/// </summary>
/// <param name="pToDecrypt">要解密的以Base64</param>
/// <param name="sKey">密钥,且必须8位</param>
/// <returns>已解密的字符串</returns>
public static string DepthDecrypt(string pToDecrypt, string sKey)
{
//对原加密字符串,作特殊字符替换(一级解密)
string secondDecryptStr = Regex.Replace(pToDecrypt, ReplaceStr, SourceStr);
//二级解密
var yetDecrytString = Decrypt(secondDecryptStr, sKey); return yetDecrytString;
} /// <summary>
/// 深度解密
/// </summary>
/// <param name="pToDecrypt">要解密的以Base64</param>
/// <returns>已解密的字符串</returns>
public static string DepthDecrypt(string pToDecrypt)
{
//对原加密字符串,作特殊字符替换(一级解密)
string secondDecryptStr = Regex.Replace(pToDecrypt, ReplaceStr, SourceStr);
//二级解密
var yetDecrytString = Decrypt(secondDecryptStr, StrKey); return yetDecrytString;
}
#endregion
}
}

FrmEncrypt.cs

using System;
using System.Configuration;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms; namespace UBT.Encrypt.Tools
{
public partial class FrmEncrypt : Form
{ public FrmEncrypt()
{
InitializeComponent(); var longDate = DateTime.Now.ToLongDateString();
var longTime = DateTime.Now.ToLongTimeString();
var formatDate = DateTime.Now.ToString("yyyyMMddHHmmssffff");
} /// <summary>
/// 生成密钥
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
string unEncryStr = this.txtUnEncryStr.Text.Trim(); if (unEncryStr == "")
{
MessageBox.Show("请输入待加密的字符串!");
return;
} //深度加密
var secondEncryStr = DESEncrypt.DepthEncrypt(unEncryStr); this.txtEncryStr.Text = secondEncryStr; } /// <summary>
/// 解密
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDecrypt_Click(object sender, EventArgs e)
{
var str = txtEncryStr.Text;
var yetDecrytString = DESEncrypt.DepthDecrypt(str);
txtDecryptStr.Text = yetDecrytString;
} }
}

UBT框架加解密工具项目 UBT.Framework.Encryption的更多相关文章

  1. RSA加解密工具类RSAUtils.java,实现公钥加密私钥解密和私钥解密公钥解密

    package com.geostar.gfstack.cas.util; import org.apache.commons.codec.binary.Base64; import javax.cr ...

  2. Java中的AES加解密工具类:AESUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...

  3. Java中的RSA加解密工具类:RSAUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.utils.log.LogUtils; ...

  4. XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译

    XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译 <?xml version="1.0" encoding="UTF-8" ...

  5. CTF-Tools 一款CTF古典密码加解密工具

    CTF-Tools 一款CTF古典密码加解密工具 工具截图 工具简介 一款CTF编码.解码.加密.解密工具. 支持的编码解码: URL-UTF-8 URL-GB2312 Unicode Escape( ...

  6. QuickBase64 - Android 下拉通知栏快捷base64加解密工具

    Android Quick Setting Tile Base64 Encode/Decode Tool Android 下拉通知栏快捷 base64 加解密,自动将剪切板的内容进行 base64 E ...

  7. vue 核心加解密工具类 方法

    1 /* base64 加解密 2 */ 3 export let Base64 = require('js-base64').Base64 4 5 /* md5 加解密 6 */ 7 export ...

  8. DES加解密工具类

    这两天在跟友商对接接口,在对外暴露接口的时候,因为友商不需要登录即可访问对于系统来说存在安全隐患,所以需要友商在调用接口的时候需要将数据加密,系统解密验证后才执行业务.所有的加密方式并不是万能的,只是 ...

  9. Des加解密工具

    import java.security.Key; import java.security.Security; import java.util.Date; import javax.crypto. ...

随机推荐

  1. Lambda方法推导(method references)

    在上一篇[http://www.cnblogs.com/webor2006/p/7707281.html]中提到了方法推导的东东: 这里说细的学习一下它,下面走起! Method references ...

  2. java8学习之Optional深入详解

    自上次[http://www.cnblogs.com/webor2006/p/8243874.html]函数式接口的学习告一段落之后,这次来学习一下Optional,它并非是函数式接口的概念,点击查看 ...

  3. 51Nod 1534 棋盘阻挡博弈

    很简单的可以知道 如果P在V的右上角 必输 如果P在V的左下角 必赢 接下里还剩下左上角和右下角两种情况 两种情况其实相同 P是挡不住V通过对角线方向向下/左的移动的 即两者不会相互影响 所以我们只要 ...

  4. C#工具:ASP.net 调用MySQL 帮助类(包括存储过程调用)

    1.创建DbHelperMySQL类 2.复制代码到类中 using System; using System.Collections; using System.Collections.Specia ...

  5. VIDENT iSmart900自动多系统扫描工具OBDII支持ABS / SRS / EPB /传输诊断DPF再生/上油复位编码电池配置

    Vident系列中有许多多功能产品,其中最好的是Vident iSmart 900.购买视频系列后,以下是用户的一些评论 乔:因为我想它很好用.该工具很容易更新.我将公制重量单位的代码放到工具中.很容 ...

  6. ajax上传文件(javaweb)

    前台:FormData,     formData.append("fileName",$("#file")[0].files[0];); https://ww ...

  7. BZOJ 1951: [Sdoi2010]古代猪文 ExCRT+欧拉定理+Lucas

    欧拉定理不要忘记!! #include <bits/stdc++.h> #define N 100000 #define ll long long #define ull unsigned ...

  8. BZOJ 4522: [Cqoi2016]密钥破解 exgcd+Pollard-Rho

    挺简单的,正好能再复习一遍 $exgcd$~ 按照题意一遍一遍模拟即可,注意一下 $pollard-rho$ 中的细节. #include <ctime> #include <cma ...

  9. Codeforces 979 D. Kuro and GCD and XOR and SUM(异或和,01字典树)

    Codeforces 979 D. Kuro and GCD and XOR and SUM 题目大意:有两种操作:①给一个数v,加入数组a中②给出三个数x,k,s:从当前数组a中找出一个数u满足 u ...

  10. C++入门经典-例7.2-利用构造函数初始化成员变量

    1:在创建对象时,程序自动调用构造函数.同一个类中可以有多个构造函数,通过这样的形式创建一个CPerson对象,例如: CPerson p1(0,"jack",22,7000); ...