zoukankan      html  css  js  c++  java
  • 加密


    /****************************************************************************************
    ** 作者: Eddie Xu 
    ** 时间: 2017/11/16 9:16:58
    ** 版本: V1.0.0
    ** CLR: 4.0.30319.42000
    ** GUID: 1be37132-669a-43ce-9d42-a1d3b01ca136
    ** 机器名: DESKTOP-ECII567
    ** 描述: 加解密
    ****************************************************************************************/

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;

    namespace Manjinba.Communication.Common.Utils
    {
    public class DEncryptUtil
    {
    #region 使用 给定密钥字符串 加密/解密string (Base64)
    /// <summary>
    /// 使用给定密钥字符串加密string
    /// </summary>
    /// <param name="original">原始文字</param>
    /// <param name="key">密钥</param>
    /// <param name="encoding">字符编码方案</param>
    /// <returns>密文</returns>
    public static string Encrypt(string original, string key)
    {
    byte[] buff = System.Text.Encoding.Default.GetBytes(original);
    byte[] kb = System.Text.Encoding.Default.GetBytes(key);
    return Convert.ToBase64String(Encrypt(buff, kb));
    }
    /// <summary>
    /// 使用给定密钥字符串解密string
    /// </summary>
    /// <param name="original">密文</param>
    /// <param name="key">密钥</param>
    /// <returns>明文</returns>
    public static string Decrypt(string original, string key)
    {
    return Decrypt(original, key, System.Text.Encoding.Default);
    }

    /// <summary>
    /// 使用给定密钥字符串解密string,返回指定编码方式明文
    /// </summary>
    /// <param name="encrypted">密文</param>
    /// <param name="key">密钥</param>
    /// <param name="encoding">字符编码方案</param>
    /// <returns>明文</returns>
    public static string Decrypt(string encrypted, string key, Encoding encoding)
    {
    byte[] buff = Convert.FromBase64String(encrypted);
    byte[] kb = System.Text.Encoding.Default.GetBytes(key);
    return encoding.GetString(Decrypt(buff, kb));
    }
    #endregion

    #region 使用 给定密钥 加密/解密/byte[] (MD5)

    /// <summary>
    /// 生成MD5摘要
    /// </summary>
    /// <param name="original">数据源</param>
    /// <returns>摘要</returns>
    public static byte[] MakeMD5(byte[] original)
    {
    MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
    byte[] keyhash = hashmd5.ComputeHash(original);
    hashmd5 = null;
    return keyhash;
    }

    /// <summary>
    /// 使用给定密钥加密
    /// </summary>
    /// <param name="original">明文</param>
    /// <param name="key">密钥</param>
    /// <returns>密文</returns>
    public static byte[] Encrypt(byte[] original, byte[] key)
    {
    TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
    des.Key = MakeMD5(key);
    des.Mode = CipherMode.ECB;

    return des.CreateEncryptor().TransformFinalBlock(original, 0, original.Length);
    }

    /// <summary>
    /// 使用给定密钥解密数据
    /// </summary>
    /// <param name="encrypted">密文</param>
    /// <param name="key">密钥</param>
    /// <returns>明文</returns>
    public static byte[] Decrypt(byte[] encrypted, byte[] key)
    {
    TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
    des.Key = MakeMD5(key);
    des.Mode = CipherMode.ECB;

    return des.CreateDecryptor().TransformFinalBlock(encrypted, 0, encrypted.Length);
    }

    #endregion

    #region 用MD5算法计算出签名 及验证签名

    /// <summary>
    /// 计算签名
    /// </summary>
    /// <param name="timeStamp">时间戳</param>
    /// <param name="serverTag">服务端标记</param>
    /// <param name="loginKey">登录密钥</param>
    /// <returns></returns>
    public static string MD5Signature(long timeStamp, string loginKey)
    {
    var hash = MD5.Create();
    //拼接签名数据
    var signStr = timeStamp + loginKey;
    var bytes = Encoding.UTF8.GetBytes(signStr);
    //使用MD5加密
    var md5Val = hash.ComputeHash(bytes);
    //把二进制转化为大写的十六进制
    StringBuilder result = new StringBuilder();
    foreach (var c in md5Val)
    {
    result.Append(c.ToString("X2"));
    }
    return result.ToString().ToUpper();
    }

    /// <summary>
    /// 验证签名
    /// </summary>
    /// <param name="timespan">时间戳</param>
    /// <param name="serverTag">服务端标记</param>
    /// <param name="loginKey">登录密钥</param>
    /// <param name="fromSignature">来源签名</param>
    /// <returns></returns>
    public static bool ValidateSign(long timespan, string loginKey, string fromSignature)
    {
    var signature = DEncryptUtil.MD5Signature(timespan, loginKey);
    return signature.ToString().ToUpper() == fromSignature.ToUpper();
    }

    #endregion

    /// <summary>
    /// 字符MD5加密
    /// </summary>
    /// <param name="original"></param>
    /// <returns></returns>
    public static string Encrypt(string original)
    {
    var hash = MD5.Create();
    //将字符串中字符按升序排序
    var sortStr = string.Concat(original.OrderBy(c => c));
    var bytes = Encoding.UTF8.GetBytes(sortStr);
    //使用MD5加密
    var md5Val = hash.ComputeHash(bytes);
    //把二进制转化为大写的十六进制
    var result = BitConverter.ToString(md5Val).Replace("-", "");
    return result.ToUpper();
    }

    }
    }

  • 相关阅读:
    数字雨Web安全扫描器V1.2修正版发布
    WebAttak系列教程第二季0x04讲——扫描器之王nmap
    python入门实践111课视频分享
    burpsuite上传截断拿shell
    WebAttak系列教程第二季0x02讲——三次握手
    WebAttak系列教程第二季0x01讲——从零开始
    WebAttak系列教程第二季0x03讲——常见扫描方式简介
    webattack 15视频汇总
    python编程第10讲——包和自定义模块
    在这里记录一个坑爹的问题
  • 原文地址:https://www.cnblogs.com/Nine4Cool/p/10540646.html
Copyright © 2011-2022 走看看