数据安全技术几种加密算法
来源:互联网 发布:天文望远镜 知乎 编辑:程序博客网 时间:2024/06/10 07:52
1.自定义加密 Base64编码与其他编码转换
using System;
using System.Text;
/// <summary>
/// 实现Base64编码与其它编码转换的类
/// </summary>
public class Base64Provider
{
private Base64Provider()
{
}
/// <summary>
/// 将其它编码的字符串转换成Base64编码的字符串
/// </summary>
/// <param name="source">要转换的字符串</param>
/// <returns></returns>
public static string EncodeBase64String(string source)
{
//如果字符串为空或者长度为0则抛出异常
if (string.IsNullOrEmpty(source))
{
throw new ArgumentNullException("source", "不能为空。");
}
else
{
//将字符串转换成UTF-8编码的字节数组
byte[] buffer = Encoding.UTF8.GetBytes(source);
//将UTF-8编码的字节数组转换成Base64编码的字符串
string result = Convert.ToBase64String(buffer);
return result;
}
}
/// <summary>
/// 将Base64编码的字符串转换成其它编码的字符串
/// </summary>
/// <param name="result">要转换的Base64编码的字符串</param>
/// <returns></returns>
public static string DecodeBase64String(string result)
{
//如果字符串为空或者长度为0则抛出异常
if (string.IsNullOrEmpty(result))
{
throw new ArgumentNullException("result", "不能为空。");
}
else
{
//将字符串转换成Base64编码的字节数组
byte[] buffer = Convert.FromBase64String(result);
//将字节数组转换成UTF-8编码的字符串
string source = Encoding.UTF8.GetString(buffer);
return source;
}
}
}
2.对称加密
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
/// <summary>
/// DES算法加密解密
/// </summary>
public class DESProvider
{
private DESProvider()
{
}
//默认的初始化密钥
private static string key = "netskycn";
/// <summary>
/// 对称加密解密的密钥
/// </summary>
public static string Key
{
get
{
return key;
}
set
{
key = value;
}
}
#region 加密
/// <summary>
/// 采用DES算法对字符串加密
/// </summary>
/// <param name="encryptString">要加密的字符串</param>
/// <param name="key">加密的密钥</param>
/// <returns></returns>
public static string EncryptString(string encryptString,string key)
{
//加密加密字符串是否为空
if (string.IsNullOrEmpty(encryptString))
{
throw new ArgumentNullException("encryptString", "不能为空");
}
//加查密钥是否为空
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException("key", "不能为空");
}
//将密钥转换成字节数组
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
//设置初始化向量
byte[] keyIV = keyBytes;
//将加密字符串转换成UTF8编码的字节数组
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
//调用EncryptBytes方法加密
byte[] resultByteArray = EncryptBytes(inputByteArray, keyBytes, keyIV);
//将字节数组转换成字符串并返回
return Convert.ToBase64String(resultByteArray);
}
/// <summary>
/// DES加密
/// </summary>
/// <param name="encryptString">要加密的字符串</param>
/// <returns></returns>
public static string EncryptString(string encryptString)
{
return EncryptString(encryptString, key);
}
/// <summary>
/// 采用DES算法对字节数组加密
/// </summary>
/// <param name="sourceBytes">要加密的字节数组</param>
/// <param name="keyBytes">算法的密钥,长度为8的倍数,最大长度64</param>
/// <param name="keyIV">算法的初始化向量,长度为8的倍数,最大长度64</param>
/// <returns></returns>
public static byte[] EncryptBytes(byte[] sourceBytes, byte[] keyBytes, byte[] keyIV)
{
if (sourceBytes == null || keyBytes == null || keyIV==null)
{
throw new ArgumentNullException("sourceBytes和keyBytes", "不能为空。");
}
else
{
//检查密钥数组长度是否是8的倍数并且长度是否小于64
keyBytes = CheckByteArrayLength(keyBytes);
//检查初始化向量数组长度是否是8的倍数并且长度是否小于64
keyIV = CheckByteArrayLength(keyIV);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
//实例化内存流MemoryStream
MemoryStream mStream = new MemoryStream();
//实例化CryptoStream
CryptoStream cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write);
cStream.Write(sourceBytes, 0, sourceBytes.Length);
cStream.FlushFinalBlock();
//将内存流转换成字节数组
byte[] buffer = mStream.ToArray();
mStream.Close();//关闭流
cStream.Close();//关闭流
return buffer;
}
}
#endregion
#region 解密
public static string DecryptString(string decryptString,string key)
{
if (string.IsNullOrEmpty(decryptString))
{
throw new ArgumentNullException("decryptString", "不能为空");
}
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException("key", "不能为空");
}
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] keyIV = keyBytes;
//将解密字符串转换成Base64编码字节数组
byte[] inputByteArray = Convert.FromBase64String(decryptString);
//调用DecryptBytes方法解密
byte[] resultByteArray = DecryptBytes(inputByteArray, keyBytes, keyIV);
//将字节数组转换成UTF8编码的字符串
return Encoding.UTF8.GetString(resultByteArray);
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="decryptString">要解密的字符串</param>
/// <returns></returns>
public static string DecryptString(string decryptString)
{
return DecryptString(decryptString, key);
}
/// <summary>
/// 采用DES算法对字节数组解密
/// </summary>
/// <param name="sourceBytes">要加密的字节数组</param>
/// <param name="keyBytes">算法的密钥,长度为8的倍数,最大长度64</param>
/// <param name="keyIV">算法的初始化向量,长度为8的倍数,最大长度64</param>
/// <returns></returns>
public static byte[] DecryptBytes(byte[] soureBytes, byte[] keyBytes, byte[] keyIV)
{
if (soureBytes == null || keyBytes == null || keyIV == null)
{
throw new ArgumentNullException("soureBytes和keyBytes及keyIV", "不能为空。");
}
else
{
//检查密钥数组长度是否是8的倍数并且长度是否小于64
keyBytes = CheckByteArrayLength(keyBytes);
//检查初始化向量数组长度是否是8的倍数并且长度是否小于64
keyIV = CheckByteArrayLength(keyIV);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, provider.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write);
cStream.Write(soureBytes, 0, soureBytes.Length);
cStream.FlushFinalBlock();
//将内存流转换成字节数组
byte[] buffer = mStream.ToArray();
mStream.Close();//关闭流
cStream.Close();//关闭流
return buffer;
}
}
#endregion
/// <summary>
/// 检查密钥或初始化向量的长度,如果不是8的倍数或长度大于64则截取前8个元素
/// </summary>
/// <param name="byteArray">要检查的数组</param>
/// <returns></returns>
private static byte[] CheckByteArrayLength(byte[] byteArray)
{
byte[] resultBytes = new byte[8];
//如果数组长度小于8
if (byteArray.Length < 8)
{
return Encoding.UTF8.GetBytes("12345678");
}
//如果数组长度不是8的倍数
else if (byteArray.Length % 8 != 0 || byteArray.Length > 64)
{
Array.Copy(byteArray, 0, resultBytes, 0, 8);
return resultBytes;
}
else
{
return byteArray;
}
}
}
3.加密哈希 md5
using System;
using System.Text;
using System.Security.Cryptography;
/// <summary>
/// MD5Provider 的摘要说明
/// </summary>
public class MD5Provider
{
private MD5Provider()
{
}
/// <summary>
/// 用MD5算法进行加密哈希
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public static string Hash(string message)
{
if (string.IsNullOrEmpty(message))
{
return string.Empty;
}
else
{
//创建MD5算法的默认实例
MD5 md5 = MD5.Create();
//将要加密的字符串按照UTF8编码转换成字节数组
byte[] source = Encoding.UTF8.GetBytes(message);
//计算字节数组的哈希值
byte[] result = md5.ComputeHash(source);
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
//将字节数组中的每个元素转换成十六进制形势
buffer.Append(result[i].ToString("X"));
}
return buffer.ToString();
}
}
}
- 数据安全技术几种加密算法
- 数据安全技术
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种加密算法介绍
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种加密算法
- 几种常见加密算法
- php的几种加密算法
- Java Web_几种加密算法
- 几种常用加密算法比较
- MD5的几种加密算法
- 新手向导--logo学习导航
- 純手工安裝 MinGW (適用 gcc 4.5)
- CentOS shell中知识
- centos 5安装图解
- Asp和Asp.net的区别
- 数据安全技术几种加密算法
- jquery 动态选中radio
- 面试题,进程中的两个fork
- 用powerdesigner15从oracle11g数据库中导出数据物理模型
- C代码检测内存泄漏
- 忘了有多久
- linux下的信号量操作示例
- oracle 正则表达式语法 - Perl
- Linux内核中的一些基本数据结构操作