加解密封装

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

namespace CCTVRigthsCenter.Util
{
    public class EncryptHelper
    {
        /// <summary>
        /// MD5 hash加密
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static string MD5(string s)
        {
            var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            var result = BitConverter.ToString(md5.ComputeHash(UnicodeEncoding.UTF8.GetBytes(s.Trim())));
            return result;
        }

public static string GetMD5HashFromFile(Stream file)
        {
            try
            {
                System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
                byte[] retVal = md5.ComputeHash(file);

StringBuilder sb = new StringBuilder();
                for (int i = 0; i < retVal.Length; i++)
                {
                    sb.Append(retVal[i].ToString("x2"));
                }
                return sb.ToString();
            }
            catch (Exception ex)
            {
                throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
            }
        }

#region DES加密解密
        //默认密钥向量
        private static byte[] keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

/// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="encryptString">待加密的字符串</param>
        /// <param name="encryptKey">加密密钥,要求为8位</param>
        /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
        public static string Encode(string encryptString, string encryptKey = "cmyprint")
        {
            encryptKey = encryptKey.Substring(0, 8);
            encryptKey = encryptKey.PadRight(8, ‘ ‘);
            byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
            byte[] rgbIV = keys;
            byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
            DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
            MemoryStream mStream = new MemoryStream();
            CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
            cStream.Write(inputByteArray, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();
            return Convert.ToBase64String(mStream.ToArray());

}

/// <summary>
        /// WebApi的basic认证里的加密
        /// </summary>
        /// <param name="data"></param>
        /// <param name="application"></param>
        /// <param name="key"></param>
        /// <param name="IV"></param>
        /// <returns></returns>
        public static string Encode(string data, string application = "IOS", string key = "swkj1111", string IV = "swkj1111")
        {
            byte[] inputByteArray = Encoding.UTF8.GetBytes(data);
            byte[] rgbKey = Encoding.UTF8.GetBytes(key);
            byte[] rgbIV = Encoding.UTF8.GetBytes(IV);

DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
            MemoryStream mStream = new MemoryStream();
            CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
            cStream.Write(inputByteArray, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();

string desString = Convert.ToBase64String(mStream.ToArray());

return EncodeBase64(Encoding.UTF8, application + ":" + desString);
        }

/// <summary>
        /// DES解密字符串
        /// </summary>
        /// <param name="decryptString">待解密的字符串</param>
        /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
        /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
        public static string Decode(string decryptString, string decryptKey = "cmyprint")
        {
            try
            {
                decryptKey = decryptKey.Substring(0, 8);
                decryptKey = decryptKey.PadRight(8, ‘ ‘);
                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
                byte[] rgbIV = keys;
                byte[] inputByteArray = Convert.FromBase64String(decryptString);
                DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();

MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Encoding.UTF8.GetString(mStream.ToArray());
            }
            catch
            {
                return "";
            }

}
        #endregion

#region Base64加解密
        /// <summary>
        /// Base64加密
        /// </summary>
        /// <param name="codeName">加密采用的编码方式</param>
        /// <param name="source">待加密的明文</param>
        /// <returns></returns>
        private static string EncodeBase64(Encoding encode, string source)
        {
            string strRulst;
            byte[] bytes = encode.GetBytes(source);
            try
            {
                strRulst = Convert.ToBase64String(bytes);
            }
            catch
            {
                strRulst = source;
            }
            return strRulst;
        }

/// <summary>
        /// Base64加密,采用utf8编码方式加密
        /// </summary>
        /// <param name="source">待加密的明文</param>
        /// <returns>加密后的字符串</returns>
        public static string EncodeBase64(string source)
        {
            return EncodeBase64(Encoding.UTF8, source);
        }

/// <summary>
        /// Base64解密
        /// </summary>
        /// <param name="codeName">解密采用的编码方式,注意和加密时采用的方式一致</param>
        /// <param name="result">待解密的密文</param>
        /// <returns>解密后的字符串</returns>
        private static string DecodeBase64(Encoding encode, string result)
        {
            string decode = "";
            byte[] bytes = Convert.FromBase64String(result);
            try
            {
                decode = encode.GetString(bytes);
            }
            catch
            {
                decode = result;
            }
            return decode;
        }

/// <summary>
        /// Base64解密,采用utf8编码方式解密
        /// </summary>
        /// <param name="result">待解密的密文</param>
        /// <returns>解密后的字符串</returns>
        public static string DecodeBase64(string result)
        {
            return DecodeBase64(Encoding.UTF8, result);
        }
        #endregion

#region BEGIN 新增加密 add by show 2016-10-10 16:09:20

/// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="encryptString">待加密的字符串</param>
        /// <param name="application">应用名称</param>
        /// <param name="key">加密密钥,要求为8位</param>
        /// <param name="IV">加密密钥,要求为8位</param>
        /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
        public static string EncryptApplicationAndURL(string encryptString, string application, string key, string IV)
        {
            try
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(key);
                byte[] rgbIV = Encoding.UTF8.GetBytes(IV);
                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                string desString = Convert.ToBase64String(mStream.ToArray());

return EncryptHelper.EncodeBase64(application + ":" + desString);
            }
            catch
            {
                throw;
            }
        }

/// <summary>
        /// 描述:Base64URLSafe解密
        /// 作者:show
        /// 时间:2016-10-10 09:07:20
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static string Base64URLSafeDecode(string text)
        {
            if (String.IsNullOrEmpty(text))
                return "";

text = text.Replace(‘-‘, ‘+‘).Replace(‘_‘, ‘/‘);

var yu = text.Length % 4;

if (yu > 0)
            {
                text = text.PadRight(text.Length + 4 - yu, ‘=‘);
            }

return Encoding.UTF8.GetString(Convert.FromBase64String(text));
        }

/// <summary>
        /// 描述:URL安全的base64编码
        /// 作者:show
        /// 时间:2016-10-10 15:50:20
        /// </summary>
        /// <param name="text">要编码的字符串</param>
        /// <returns></returns>
        public static string ToBase64URLSafe(string text)
        {
            if (String.IsNullOrEmpty(text))
                return "";

byte[] bs = Encoding.UTF8.GetBytes(text);
            var encodedStr = Convert.ToBase64String(bs);
            encodedStr = encodedStr.Replace(‘+‘, ‘-‘).Replace(‘/‘, ‘_‘).TrimEnd(‘=‘);

return encodedStr;
        }

#endregion END 新增加密
    }
}

时间: 2024-10-31 11:57:38

加解密封装的相关文章

AES算法加解密纯C语言实现

文件清单: AES算法实现:aes.c,aes.h AES算法CBC模式加解密封装:aes_util.c,aes_util.h BASE64编解码实现:base64.c,base64.h AES算法测试:aes_util_test.c aes.c: /********************************************************************* * Filename: aes.c * Author: Brad Conte (brad AT bradco

栅栏加解密python实现(支持密钥加密)

栅栏加解密是对较短字符串的一种处理方式.给定行数Row,依据字符串长度计算出列数Column,构成一个方阵. 加密过程:就是按列依次从上到下对明文进行排列,然后依照密钥对各行进行打乱.最后以行顺序从左至右进行合并形成密文. 解密过程:将上述过程进行逆推,对每一行依据密钥的顺序回复到原始的方阵的顺序,并从密文回复原始的方阵,最后按列的顺序从上到下从左至右解密. 详细实现例如以下:全部实现封装到一个类RailFence中,初始化时能够指定列数和密钥,默认列数为2,无密钥.初始化函数例如以下: def

C#微信公众号开发系列教程三(消息体签名及加解密)

  C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南)    距离上一篇博文已经半个月了,本来打算每两天更新一次的,但可怜苦逼码农无日无夜的加班.第一篇博文发表后,博文视点的编辑就找到我,问我想不想出版这个系列,我当时瞬间就想到了王大锤的独白,想想真的是有点小激动,后面按照那边的要求,提交了申请书,也提交了目录,可惜文笔不行,再加上最近太忙,样稿一直没有给他,感觉挺愧疚了.真心希望能帮一下迷茫的

POCO库——Foundation组件之加解密Crypt

加解密Crypt:内部提供多种加解密方式.信息摘要提取.随机数产生等,具体的算法内部实现不做研究学习: DigestEngine.h :DigestEngine类作为各种摘要提取的基类,提供必要的接口:update:参数为提供将被提取的数据信息,digest:获取信息摘要,digestLength:获取信息摘要的长度: reset:重置将被提取的数据信息以重新产生信息摘要计算,digestToHex与digestFromHex:信息摘要与十六进制数据串相互转化,updateImpl:更新数据信息

使用delphi+intraweb进行微信开发4—微信消息加解密

在上一讲当中我做了个简单的微信文本消息回显应用,当时是以微信明文方式实现的,其实微信推荐的是消息应该加密传输以增加安全性,所以这讲说说微信消息的加解密. 在微信的帮助页面上可以下载微信消息加解密的例程,可惜的是没有Delphi语言的示例,网上搜索一番,没有人贡献出写好的Delphi版的微信加解密算法单元,好在有官方示例的C#版的,那就按照C#的改一个吧. 微信消息是以AES算法进行的加密处理,而遗憾的是Delphi并没有内置的AES算法单元,必须找第三方实现的,不过一般第三方实现的算法都因为种种

CryptoGUI | 文件加解密

分类: 杂类工具    版本: 0.0.3    发布日期: 2015-03-31 根据 crypto 强加密命令行工具制作的可视化版本,可快速进行任意文件的加解密操作,提供丰富的加解密选项以适应多种不同需求:CryptoGui 在 crypto 的基础上进行了人性化定制,使用更方便. 功能简介 支持当今绝大部分对称强加密算法 可定制的密钥长度,从最低32位到最高的448位.信息安全强度由用户自由选择. 算法库基于优秀的 Cryptopp 库封装,已通过FIPS 140-2美国国家信息处理标准一

微信开发(五)微信消息加解密 (EncodingAESKey)

div#cpmenu {height:200px;float:left;} div#cpcontent {height:200px;width:150px;float:left;} 文章作者:松阳 原文链接:http://blog.csdn.net/fansongy/article/details/44005301 消息体加密 随着微信服务开发在越来越多的领域应用,应用的安全性逐渐被重视起来.本文主要阐述如何为微信的消息加密的原理与Java版本的实现. 原理 做过微信开发的朋友们都知道,微信使用

9.Java 加解密技术系列之 RSA

Java 加解密技术系列之 RSA 序 概念 工作流程 RSA 代码实现 加解密结果 结束语 序 距 离上一次写博客感觉已经很长时间了,先吐槽一下,这个月以来,公司一直在加班,又是发版.上线,又是新项目太紧,具体的就不多说了,想听我吐槽的小伙伴, 可以私信给我(*^__^*) .上一篇文章,已经把对称加密的算法讲完了.从今天开始,要说说非对称加密了.因为,非对称加密真的是太重要了,我们的日常生活中,都离不开非对称加密. 概念 在说 RSA 之前,首先聊聊什么是非对称加密.在讲对称加密的时候,就曾

curses-键盘编码-openssl加解密【转】

本文转载自;https://zhuanlan.zhihu.com/p/26164115 1.1 键盘编码 按键过程:当用户按下某个键时, 1.键盘会检测到这个动作,并通过键盘控制器把扫描码(scan code)传送到计算机:键盘扫描码跟具体的硬件有关的,不同厂商对同一个键的扫描码有可能不同.2.计算机接收到扫描码后,将其交给键盘驱动程序:3.键盘驱动程序把这个扫描码转换为键盘虚拟码:虚拟码与具体硬件无关,不同厂商的键盘,同一个键的虚拟码总是相同的.然后,键盘驱动程序把该键盘操作的扫描码和虚拟码以