用C#实现的数据加密(一) -- 对称加密算法

以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例:

using System;

using System.IO;

using System.Security.Cryptography;

using System.Text;

namespace DataCrypto

{

///


/// 对称加密算法类

///

public class SymmetricMethod

{

private SymmetricAlgorithm mobjCryptoService;

private string Key;

///


/// 对称加密类的构造函数

///

public SymmetricMethod()

{

mobjCryptoService = new RijndaelManaged();

Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";

}

///


/// 获得密钥

///

/// 密钥

private byte[] GetLegalKey()

{

string sTemp = Key;

mobjCryptoService.GenerateKey();

byte[] bytTemp = mobjCryptoService.Key;

int KeyLength = bytTemp.Length;

if (sTemp.Length > KeyLength)

sTemp = sTemp.Substring(0, KeyLength);

else if (sTemp.Length

sTemp = sTemp.PadRight(KeyLength, ‘ ‘);

return ASCIIEncoding.ASCII.GetBytes(sTemp);

}

///


/// 获得初始向量IV

///

/// 初试向量IV

private byte[] GetLegalIV()

{

string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";

mobjCryptoService.GenerateIV();

byte[] bytTemp = mobjCryptoService.IV;

int IVLength = bytTemp.Length;

if (sTemp.Length > IVLength)

sTemp = sTemp.Substring(0, IVLength);

else if (sTemp.Length

sTemp = sTemp.PadRight(IVLength, ‘ ‘);

return ASCIIEncoding.ASCII.GetBytes(sTemp);

}

///


/// 加密方法

///

/// 待加密的串

/// 经过加密的串

public string Encrypto(string Source)

{

byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);

MemoryStream ms = new MemoryStream();

mobjCryptoService.Key = GetLegalKey();

mobjCryptoService.IV = GetLegalIV();

ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();

CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);

cs.Write(bytIn, 0, bytIn.Length);

cs.FlushFinalBlock();

ms.Close();

byte[] bytOut = ms.ToArray();

return Convert.ToBase64String(bytOut);

}

///


/// 解密方法

///

/// 待解密的串

/// 经过解密的串

public string Decrypto(string Source)

{

byte[] bytIn = Convert.FromBase64String(Source);

MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);

mobjCryptoService.Key = GetLegalKey();

mobjCryptoService.IV = GetLegalIV();

ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();

CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);

StreamReader sr = new StreamReader(cs);

return sr.ReadToEnd();

}

}

}

以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例:

using System;

using System.IO;

using System.Security.Cryptography;

using System.Text;

namespace DataCrypto

{

///


/// 对称加密算法类

///

public class SymmetricMethod

{

private SymmetricAlgorithm mobjCryptoService;

private string Key;

///


/// 对称加密类的构造函数

///

public SymmetricMethod()

{

mobjCryptoService = new RijndaelManaged();

Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";

}

///


/// 获得密钥

///

/// 密钥

private byte[] GetLegalKey()

{

string sTemp = Key;

mobjCryptoService.GenerateKey();

byte[] bytTemp = mobjCryptoService.Key;

int KeyLength = bytTemp.Length;

if (sTemp.Length > KeyLength)

sTemp = sTemp.Substring(0, KeyLength);

else if (sTemp.Length

sTemp = sTemp.PadRight(KeyLength, ‘ ‘);

return ASCIIEncoding.ASCII.GetBytes(sTemp);

}

///


/// 获得初始向量IV

///

/// 初试向量IV

private byte[] GetLegalIV()

{

string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";

mobjCryptoService.GenerateIV();

byte[] bytTemp = mobjCryptoService.IV;

int IVLength = bytTemp.Length;

if (sTemp.Length > IVLength)

sTemp = sTemp.Substring(0, IVLength);

else if (sTemp.Length

sTemp = sTemp.PadRight(IVLength, ‘ ‘);

return ASCIIEncoding.ASCII.GetBytes(sTemp);

}

///


/// 加密方法

///

/// 待加密的串

/// 经过加密的串

public string Encrypto(string Source)

{

byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);

MemoryStream ms = new MemoryStream();

mobjCryptoService.Key = GetLegalKey();

mobjCryptoService.IV = GetLegalIV();

ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();

CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);

cs.Write(bytIn, 0, bytIn.Length);

cs.FlushFinalBlock();

ms.Close();

byte[] bytOut = ms.ToArray();

return Convert.ToBase64String(bytOut);

}

///


/// 解密方法

///

/// 待解密的串

/// 经过解密的串

public string Decrypto(string Source)

{

byte[] bytIn = Convert.FromBase64String(Source);

MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);

mobjCryptoService.Key = GetLegalKey();

mobjCryptoService.IV = GetLegalIV();

ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();

CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);

StreamReader sr = new StreamReader(cs);

return sr.ReadToEnd();

}

}

}


相关文章

  • 7网络与信息安全课程设计报告
  • <网络与信息安全>课程设计报告班级:07网络工程(3)班学号:[1**********]8姓名:韩立伟 题目: 评阅:加密软件的设计 成绩: 2010-1-07 RSA算法加密软件的设计 摘要:分析RSA算法的应用现状,论证文件 ...查看


  • 信息安全概论加密算法论文
  • 随着信息时代的到来,特别是随着Internet和电子商务的发展,怎样才能达到使信息系统的机密信息难以被泄漏,或者即使被窃取了也极难识别,以及即使被识别了也极难篡改,已经成为IT业界的热点研究课题.到现在为止网络安全解决方案可以分为两大类:一 ...查看


  • 历年软考系统分析师真题练习题及答案(四)
  • 历年软考系统分析师真题练习题及答案(四) 1.栈结构不适用地下列( )应用 A. 表达式求值 B. 树的层次序周游算法的实现 C. 二叉树对称序周游算法的实现 D. 快速排序算法的实现 2.以下关于数据结构的基本概念的叙述中( )是错误的. ...查看


  • 基于RSA的数字签名技术
  • 基于RSA 的数字签名技术 胡思雨1,孙秀丽2,张瑞华3 (1安徽师范大学数学计算机科学学院, 安徽,芜湖,241000 2安徽师范大学数学计算机科学学院, 安徽,芜湖,241000 3安徽师范大学数学计算机科学学院, 安徽,芜湖,2410 ...查看


  • 网络加密文献综述
  • 网络加密技术文献综述 摘要:网络加密作为互联网时代的必需品之一,与人们的生活越来越密切,本文从网络加密的概念出发,对网络加密技术的基本算法以及基于这些基本算法而不断演进的加密技术进行了综述,最后对网络加密技术的在电子商务和VPN中的应用做了 ...查看


  • 网络安全基础教程-试题答案
  • 网络基础教程安全试题 一.单选 1. 在以下人为的恶意攻击行为中,属于主动攻击的是( ) A. 数据篡改及破坏 B. 数据窃听 C. 数据流分析 D. 非法访问 2. 数据完整性指的是( ) A. 保护网络中各系统之间交换的数据,防止因数据 ...查看


  • 简单加密技术
  • 简单加密技术 [摘要]本文首先在引言中介绍了数据加密的一些相关背景,其次在数据加密方法中简要介绍了数据加密的对称加密(传统加密算法)和非对称加密(基于公钥加密算法)的实现方法及各自优点缺点.最后在编写新的算法中本人结合传统加密算法用C语言实 ...查看


  • 非对称加密算法对称非对称密钥加密算法
  • www.woxia.net 非对称加密算法:对称/非对称密钥加 基于"对称密钥"的加密算法主要有DES.TripleDES.RC2.RC4.RC5和Blowfish等:"非密算法 对称密钥"的加密算法 ...查看


  • 公钥加密算法
  • 公钥加密算法 一.简介 公钥加密算法需要两个密钥:公开密钥(publickey )和私有密钥 (privatekey ).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私有密钥对数据进行加密,那 ...查看


热门内容