EncryptionHelper
public static class EncryptionHelper
{
#region const
/// <summary>
/// 默认使用的适合于DES,RC2算法的Key
/// </summary>
private const string m_ShortDefaultKey = "Nesc";
/// <summary>
/// 默认使用的TRIPLEDES,RIJNDAEL算法的Key
/// </summary>
private const string m_LongDefaultKey = "Nesc.Oversea";
/// <summary>
/// 默认使用的适合于DES,RC2,TRIPLEDES算法的InitVector
/// </summary>
private const string m_ShortDefaultIV = ""; /// <summary>
/// 默认使用的适合于RIJNDAEL算法的InitVector
/// </summary>
private const string m_LongDefaultIV = "Oversea3"; #endregion
private static byte[] m_Key = null; private static byte[] m_initVec = null; #region properties
/// <summary>
/// 使用的加密明文密码
/// </summary>
public static string Key
{
get
{
string result = string.Empty;
if (m_Key != null)
{
result = Encoding.Unicode.GetString(m_Key);
}
return result;
} }
/// <summary>
/// 使用加密的起始偏移量
/// </summary>
public static string InitVector
{
get
{
string result = string.Empty;
if (m_initVec != null)
{
result = Encoding.Unicode.GetString(m_initVec);
}
return result;
} }
#endregion /// <summary>
/// 接受用户明文密码,本次加密使用的算法,完成对指定字符串的加密
/// <example><![CDATA[string result = EncryptionHelper.Encrypt("1234", EncryptionAlgorithm.Rc2, "5678", text);]]></example>
/// <remarks>各个算法对明文密码和初始化偏移量的要求不一样
/// DES和RC2:明文密码长度和初始化偏移量长度 必须是4个字符;
/// Rijndael:明文密码长度可以是12,16个字符,初始化偏移量为8个字符;
/// TripleDes:明文密码长度可以为8个和12个字符,初始化偏移量为4个字符;
/// 注意:如果提供的明文密码和偏移量不符合算法的标准,将使用随机密码,使用者在加密后通过提供的Key和InitVector属性获得加密时使用的明文密码和偏移量
/// </remarks>
/// </summary>
/// <param name="plainText">使用的加密明文密码</param>
/// <param name="algorithm">加密算法枚举对象</param>
/// <param name="userInitialVector">使用的加密起始偏移量</param>
/// <param name="encryptionText">需要加密的字符</param>
/// <returns></returns>
public static string Encrypt(string plainText, EncryptionAlgorithm algorithm, string userInitialVector, string encryptionText)
{
string result = string.Empty; if (encryptionText.Length > )
{
SetKey(algorithm, plainText);
SetInitialVector(algorithm, userInitialVector);
EncryptTransform transform = new EncryptTransform(m_Key,m_initVec);
byte[] bytes = Encoding.Unicode.GetBytes(encryptionText);
byte[] inArray = transform.Encrypt(algorithm, bytes);
if (inArray.Length > )
{
result = Convert.ToBase64String(inArray);
}
m_Key = transform.Key;
m_initVec = transform.InitVec; }
return result; } /// <summary>
/// 指定需要加密的字符串使用默认的明文密码和算法(DES)进行加密
/// </summary>
/// <param name="encryptionText"></param>
/// <returns></returns>
public static string Encrypt(string encryptionText)
{
string result = string.Empty;
result = Encrypt(m_ShortDefaultKey, EncryptionAlgorithm.Des, m_ShortDefaultIV, encryptionText);
return result;
}
/// <summary>
/// 指定需要加密的字符串和算法使用默认的明文密码进行加密
/// </summary>
/// <param name="algorithm"></param>
/// <param name="encryptionText"></param>
/// <returns></returns>
public static string Encrypt(EncryptionAlgorithm algorithm, string encryptionText)
{
string result = string.Empty;
string key = GetDefaultKey(algorithm);
string iv = GetDefaultIV(algorithm);
result = Encrypt(key, algorithm, iv, encryptionText);
return result;
} /// <summary>
/// 接受用户明文密码,使用默认的加密算法完成对指定字符串的加密
/// <remarks>默认为DES算法进行加密</remarks>
/// <example><![CDATA[string result = EncryptionHelper.Encrypt("1234", "5678", text);]]></example>
/// </summary>
/// <param name="plainText">使用的加密明文密码</param>
/// <param name="userInitialVector">使用的加密起始偏移量</param>
/// <param name="encryptionText">需要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string Encrypt(string plainText, string userInitialVector, string encryptionText)
{
string result = string.Empty;
result = Encrypt(plainText, EncryptionAlgorithm.Des, userInitialVector, encryptionText);
return result;
} /// <summary>
/// 接受用户明文密码,本次使用的解密算法,完成对指定字符串的解密;
/// <remarks>指定的解密算法必须和字符串使用加密的算法一致
/// 各个算法对明文密码和初始化偏移量的要求不一样
/// DES和RC2:明文密码长度和初始化偏移量长度 必须是4个字符;
/// Rijndael:明文密码长度可以是12,16个字符,初始化偏移量为8个字符;
/// TripleDes:明文密码长度可以为8个和12个字符,初始化偏移量为4个字符;
/// </summary>
/// <param name="plainText">加密明文密码</param>
/// <param name="algorithm">使用的加密算法</param>
/// <param name="userInitialVector">加密时使用的起始偏移量</param>
/// <param name="encryptionText">加密后的字符串</param>
/// <returns></returns>
public static string Decrypt(string plainText, EncryptionAlgorithm algorithm, string userInitialVector, string encryptionText)
{
string result = string.Empty;
SetKey(algorithm, plainText);
SetInitialVector(algorithm, userInitialVector);
EncryptTransform transform = new EncryptTransform(m_Key, m_initVec);
byte[] bytesData = Convert.FromBase64String(encryptionText);
byte[] bytes = null;
try
{
bytes = transform.Decrypt(algorithm, bytesData);
}
catch (Exception exception)
{
throw exception;
}
if (bytes.Length > )
{
result = Encoding.Unicode.GetString(bytes);
}
m_Key = transform.Key;
m_initVec = transform.InitVec;
return result; } /// <summary>
/// 接受用户明文密码,使用默认解密算法完成对指定字符串的解密
/// </summary>
/// <param name="plainText">加密时使用的明文密码</param>
/// <param name="userInitialVector">加密时使用的起始偏移量</param>
/// <param name="encryptionText">加密后的字符串</param>
/// <returns></returns>
public static string Decrypt(string plainText, string userInitialVector, string encryptionText)
{
string result = string.Empty;
result=Decrypt(plainText, EncryptionAlgorithm.Des,userInitialVector,encryptionText);
return result; } /// <summary>
/// 使用默认的算法(DES)和默认的明文密码进行解密
/// </summary>
/// <param name="encryptionText"></param>
/// <returns></returns>
public static string Decrypt(string encryptionText)
{
string result = string.Empty;
result = Decrypt(m_ShortDefaultKey, EncryptionAlgorithm.Des, m_ShortDefaultIV, encryptionText);
return result; }
/// <summary>
/// 指定加密时使用的算法,使用默认的明文密码进行解密
/// </summary>
/// <param name="algorithm"></param>
/// <param name="encryptionText"></param>
/// <returns></returns>
public static string Decrypt(EncryptionAlgorithm algorithm,string encryptionText)
{
string result = string.Empty;
string key = GetDefaultKey(algorithm);
string iv = GetDefaultIV(algorithm);
result = Decrypt(key, algorithm, iv, encryptionText);
return result; } /// <summary>
/// 根据算法获得默认的Key
/// </summary>
/// <param name="algorithm"></param>
/// <returns></returns>
private static string GetDefaultKey(EncryptionAlgorithm algorithm)
{
string result = m_ShortDefaultKey;
switch (algorithm)
{
case EncryptionAlgorithm.Rijndael:
{
result = m_LongDefaultKey;
break;
}
case EncryptionAlgorithm.TripleDes:
{
result = m_LongDefaultKey;
break;
}
}
return result;
}
/// <summary>
/// 根据算法获得默认的IV
/// </summary>
/// <param name="algorithm"></param>
/// <returns></returns>
private static string GetDefaultIV(EncryptionAlgorithm algorithm)
{
string result = m_ShortDefaultIV;
switch (algorithm)
{
case EncryptionAlgorithm.Rijndael:
{
result = m_LongDefaultIV;
break;
}
}
return result;
} /// <summary>
///
/// </summary>
/// <param name="algorithm"></param>
/// <param name="initialVector"></param>
/// <returns></returns>
private static void SetInitialVector(EncryptionAlgorithm algorithm, string initialVector)
{
if (null != initialVector)
{
byte[] bytes = Encoding.Unicode.GetBytes(initialVector);
switch (algorithm)
{
case EncryptionAlgorithm.Des:
{
if ( bytes.Length == )
{
m_initVec = bytes; }
break;
} case EncryptionAlgorithm.Rc2:
{
if ( bytes.Length == )
{
m_initVec = bytes; }
break;
}
case EncryptionAlgorithm.Rijndael:
{
if ( bytes.Length ==)
{
m_initVec = bytes; }
break;
}
case EncryptionAlgorithm.TripleDes:
{
if (bytes.Length == )
{
m_initVec = bytes; }
break;
}
}
}
} private static void SetKey(EncryptionAlgorithm algorithm, string key)
{
if (null != key)
{
byte[] keyByte = Encoding.Unicode.GetBytes(key);
switch (algorithm)
{
case EncryptionAlgorithm.Des:
{
if (keyByte.Length== )
{
m_Key = keyByte;
}
break;
} case EncryptionAlgorithm.Rc2:
{
if (keyByte.Length == )
{
m_Key = keyByte;
}
break;
}
case EncryptionAlgorithm.Rijndael:
{
if (keyByte.Length== || (keyByte.Length == ))
{
m_Key = keyByte;
}
break;
}
case EncryptionAlgorithm.TripleDes:
{
if (keyByte.Length == ||(keyByte.Length == ))
{
m_Key = keyByte;
}
break;
}
}
}
} }
EncryptionHelper的更多相关文章
- App开发流程之加密工具类
科技优家 2016-09-08 18:10 从这篇记录开始,记录的都算是干货了,都是一些编程日常的积累. 我建议先将基础的工具加入项目,后续的开发效率会呈指数增长.如果在专注功能开发过程中,才发现缺少 ...
- MVC-登录并设置角色
1.新建一个类,设置角色: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
- MVC - 身份验证
FormsAuthenticationTicket 使用此类来为用户生成一个身份票据 持有该票据则说明该用户是通过了身份验证的用户 可以随时访问某些资源 我们先创建几个类 //用户 public c ...
- 使用AES加密的帮助类
在开发中经常使用加密/解密对一些内容进行处理,比如密码在存入数据库之前先经过加密处理等等,这里就把一个加密帮助类代码贴出来,供以后查找使用. 这个帮助类主要功能是对字符串和字节数组进行加密解密处理. ...
- C#实现软件授权,限定MAC运行(软件license管理,简单软件注册机制)
一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理. 基本原理:1.软件一运 ...
- C#软件授权、注册、加密、解密模块源码解析并制作注册机生成license
最近做了一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理. ...
- C#软件license管理(简单软件注册机制)
最近做了一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理. ...
- weblogic 异常 com.rsa.jsafe.JSAFE_PaddingException: Could not perform unpadding: invalid pad byte.次异常怎么解决
问题 更改控制台密码后,服务重启失败,无法启动,报错如下: <-- 下午03时10分49秒 CST> <Info> <WebLogicServer> <BEA ...
- RSA加密、解密、签名、校验签名
先说下RSA概率: 公钥和私钥是通过本地openssl软件生成. 正常: 公钥加密=>私钥解密: 私钥签名=>公钥校验签名 最近做一个项目,对方用java公钥去校验签名,这边java的De ...
随机推荐
- YAFFS2文件系统分析(转)
http://blog.chinaunix.net/uid-25314474-id-343665.html 1.前言略. 2.yaffs 文件系统简介按理说这里应该出现一些诸如“yaffs 是一种适合 ...
- java观察者模式的实现
在看博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息.这是如何实现的?是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者,然后循环的 ...
- Linux--Ubuntu中文文件夹转英文
前言 在安装Ubuntu的时候,如果选择的系统语言为汉语,安装完成后,Ubuntu系统的主文件夹下的几个文件目录就是中文的,这样才纯终端下,输入起来确实非常的不方便.当然,如果安装Ubuntu的时候, ...
- python字符串格式化方法 format函数的使用
python从2.6开始支持format,新的更加容易读懂的字符串格式化方法, 从原来的% 模式变成新的可读性更强的 花括号声明{}.用于渲染前的参数引用声明, 花括号里可以用数字代表引用参数的序 ...
- Lumia 830 win10m 启用触摸按键
用了一年半的830疑似翘屏… 按键基本失灵 每次按的时候基本都是 appbar 那里有反映… 实在懒于换手机(主要是不想花钱…) 研究下怎么启用虚拟按键,还能再战几年… 启用虚拟按键 其实简单说法就是 ...
- Asp.net中的ajax回调模式(ICallbackEventHandler)
客户端回调本质上就是指通过前端的客户端脚本向服务器端传递相应的数据参数,服务器端再以接受到的参数进行查询和处理,最后将结果回传到客户端进行显示.asp.net 2.0提供了实现无刷新回调的接口ICal ...
- WebStorm11 注册
WebStorm11 注册 http://2.idea.lanyus.com/
- Hibernate缓存原理与策略 Hibernate缓存原理:
Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...
- Xcode8新特性和iOS10新特性
从 Xcode 8.0 开始,目前所有的插件都无法工作! NSLog 无法输出 -- 此bug等待正式版本... Xcode 提供了文档注释快捷键option + cmd + / 但是要把系统升级到1 ...
- 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求
原文:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error Sum ...