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();
    }

    }
    }

  • 相关阅读:
    C++基类的析构函数定义为虚函数的原因
    android的学习网站
    QT显示url图片
    Ubuntu安装JDK
    linux下打包压缩和解压命令
    嵌入式目录
    QT pri 文件的作用
    QT pro文件详细写法+实例
    Computer(树的直径做法)
    树的直径
  • 原文地址:https://www.cnblogs.com/Nine4Cool/p/10540646.html
Copyright © 2011-2022 走看看