一. IO读写  

  这里主要包括文件的读、写、移动、复制、删除、文件夹的创建、文件夹的删除等常规操作。

注意:这里需要特别注意,对于普通的控制台程序和Web程序,将"相对路径"转换成"绝对路径"的方法不一致。

(1). 在web程序中,可以使用HttpContext.Current.Server.MapPath进行转换,使用方法通过 ~/定位到一级目录,eg:FileOperateHelp.Write_Txt("~/TestFile/mr.txt", "mr")。

(2). 在普通的控制台程序中,HttpContext.Current为空,所以web中的转换方式在控制台中失效,需要借助 "AppDomain.CurrentDomain.BaseDirectory"来获取根目录,该目录直接定位到Debug文件夹,然后利用System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath)传入路径与根目录进行结合,所以普通的控制台程序生成的所有文件均在Debug文件夹下,当然,你也可以直接写绝对路径,比如D:xxx。

下面的方法就是专门处理普通程序和web程序路径转换问题的。

         /// <summary>
/// 10.将相对路径转换成绝对路径
/// </summary>
/// <param name="strPath">相对路径</param>
public static string PathConvert(string strPath)
{
//web程序使用
if (HttpContext.Current != null)
{
return HttpContext.Current.Server.MapPath(strPath);
}
else //非web程序引用
{
strPath = strPath.Replace("/", "\\");
if (strPath.StartsWith("\\"))
{
strPath = strPath.TrimStart('\\');
}
return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath);
}
}

下面分享一个FileOperateHelp类,里面包含IO的常规操作。

  /// <summary>
/// 文件操作类
/// 特别注意:
/// 1.在非web程序中,HttpContext.Current.Server.MapPath失效不好用,需要使用System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath);
/// 获取本目录,然后写到根目录里。AppDomain.CurrentDomain.BaseDirectory将获取到Debug文件夹,无法使用相对路径
/// 2.在web程序里,可以使用HttpContext.Current.Server.MapPath进行转换,使用方法通过 ~/定位到一级目录,eg:FileOperateHelp.Write_Txt("~/TestFile/mr.txt", "mr");
/// </summary>
public static class FileOperateHelp
{ #region 01.写文件(.txt-覆盖)
/// <summary>
/// 写文件(覆盖源文件内容)
/// 文件不存在的话自动创建
/// </summary>
/// <param name="FileName">文件路径(web里相对路径,控制台在根目录下写)</param>
/// <param name="Content">文件内容</param>
public static string Write_Txt(string FileName, string Content)
{
try
{
Encoding code = Encoding.GetEncoding("gb2312");
string htmlfilename = FileOperateHelp.PathConvert(FileName);
//string htmlfilename = HttpContext.Current.Server.MapPath(FileName + ".txt"); //保存文件的路径
string str = Content;
StreamWriter sw = null;
{
try
{
sw = new StreamWriter(htmlfilename, false, code);
sw.Write(str);
sw.Flush();
}
catch { }
}
sw.Close();
sw.Dispose();
return "ok";
}
catch (Exception ex)
{ return ex.Message;
} }
#endregion #region 02.读文件(.txt)
/// <summary>
/// 读文件
/// </summary>
/// <param name="filename">文件路径(web里相对路径,控制台在根目录下写)</param>
/// <returns></returns>
public static string Read_Txt(string filename)
{ try
{
Encoding code = Encoding.GetEncoding("gb2312");
string temp = FileOperateHelp.PathConvert(filename);
// string temp = HttpContext.Current.Server.MapPath(filename + ".txt");
string str = "";
if (File.Exists(temp))
{
StreamReader sr = null;
try
{
sr = new StreamReader(temp, code);
str = sr.ReadToEnd(); // 读取文件
}
catch { }
sr.Close();
sr.Dispose();
}
else
{
str = "";
}
return str;
}
catch (Exception ex)
{ return ex.Message;
}
}
#endregion #region 03.写文件(.txt-添加)
/// <summary>
/// 写文件
/// </summary>
/// <param name="FileName">文件路径(web里相对路径,控制台在根目录下写)</param>
/// <param name="Strings">文件内容</param>
public static string WriteFile(string FileName, string Strings)
{
try
{
string Path = FileOperateHelp.PathConvert(FileName); if (!System.IO.File.Exists(Path))
{
System.IO.FileStream f = System.IO.File.Create(Path);
f.Close();
f.Dispose();
}
System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true, System.Text.Encoding.UTF8);
f2.WriteLine(Strings);
f2.Close();
f2.Dispose();
return "ok";
}
catch (Exception ex)
{ return ex.Message;
}
}
#endregion #region 04.读文件(.txt)
/// <summary>
/// 读文件
/// </summary>
/// <param name="FileName">文件路径(web里相对路径,控制台在根目录下写)</param>
/// <returns></returns>
public static string ReadFile(string FileName)
{
try
{
string Path = FileOperateHelp.PathConvert(FileName);
string s = "";
if (!System.IO.File.Exists(Path))
s = "不存在相应的目录";
else
{
StreamReader f2 = new StreamReader(Path, System.Text.Encoding.GetEncoding("gb2312"));
s = f2.ReadToEnd();
f2.Close();
f2.Dispose();
}
return s;
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion #region 05.删除文件
/// <summary>
/// 删除文件
/// </summary>
/// <param name="Path">文件路径(web里相对路径,控制台在根目录下写)</param>
public static string FileDel(string Path)
{
try
{
string temp = FileOperateHelp.PathConvert(Path);
File.Delete(temp);
return "ok";
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion #region 06.移动文件
/// <summary>
/// 移动文件
/// </summary>
/// <param name="OrignFile">原始路径(web里相对路径,控制台在根目录下写)</param>
/// <param name="NewFile">新路径,需要写上路径下的文件名,不能单写路径(web里相对路径,控制台在根目录下写)</param>
public static string FileMove(string OrignFile, string NewFile)
{
try
{
OrignFile = FileOperateHelp.PathConvert(OrignFile);
NewFile = FileOperateHelp.PathConvert(NewFile);
File.Move(OrignFile, NewFile);
return "ok";
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion #region 07.复制文件
/// <summary>
/// 复制文件
/// </summary>
/// <param name="OrignFile">原始文件(web里相对路径,控制台在根目录下写)</param>
/// <param name="NewFile">新文件路径(web里相对路径,控制台在根目录下写)</param>
public static string FileCopy(string OrignFile, string NewFile)
{
try
{
OrignFile = FileOperateHelp.PathConvert(OrignFile);
NewFile = FileOperateHelp.PathConvert(NewFile);
File.Copy(OrignFile, NewFile, true);
return "ok";
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion #region 08.创建文件夹
/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="Path">相对路径(web里相对路径,控制台在根目录下写)</param>
public static string FolderCreate(string Path)
{
try
{
Path = FileOperateHelp.PathConvert(Path);
// 判断目标目录是否存在如果不存在则新建之
if (!Directory.Exists(Path))
{
Directory.CreateDirectory(Path);
}
return "ok";
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion #region 09.递归删除文件夹目录及文件
/// <summary>
/// 递归删除文件夹目录及文件
/// </summary>
/// <param name="dir">相对路径(web里相对路径,控制台在根目录下写) 截止到哪删除到哪,eg:/a/ 连a也删除</param>
/// <returns></returns>
public static string DeleteFolder(string dir)
{ try
{
string adir = FileOperateHelp.PathConvert(dir);
if (Directory.Exists(adir)) //如果存在这个文件夹删除之
{
foreach (string d in Directory.GetFileSystemEntries(adir))
{
if (File.Exists(d))
File.Delete(d); //直接删除其中的文件
else
DeleteFolder(d); //递归删除子文件夹
}
Directory.Delete(adir, true); //删除已空文件夹
}
return "ok";
}
catch (Exception ex)
{
return ex.Message;
}
} #endregion #region 10.将相对路径转换成绝对路径
/// <summary>
/// 10.将相对路径转换成绝对路径
/// </summary>
/// <param name="strPath">相对路径</param>
public static string PathConvert(string strPath)
{
//web程序使用
if (HttpContext.Current != null)
{
return HttpContext.Current.Server.MapPath(strPath);
}
else //非web程序引用
{
strPath = strPath.Replace("/", "\\");
if (strPath.StartsWith("\\"))
{
strPath = strPath.TrimStart('\\');
}
return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath);
}
}
#endregion }

1. 在控制台中进行调用。

                //1.写文件测试(覆盖写入)
FileOperateHelp.Write_Txt("TestFile/mr.txt", "mr123");
FileOperateHelp.Write_Txt("TestFile/mr2.txt", "mr123");
//2.读文件测试
string msg1 = FileOperateHelp.Read_Txt("TestFile/mr.txt"); //3.写文件测试(追加写入)
FileOperateHelp.WriteFile("TestFile/mr.txt", "");
//4.读文件测试
string msg2 = FileOperateHelp.ReadFile("TestFile/mr.txt"); //5.删除文件测试
FileOperateHelp.FileDel("TestFile/mr2.txt"); //6.移动文件测试
FileOperateHelp.FileMove("TestFile/mr.txt", "TestFile/TEST/mr移动.txt"); //7.复制文件测试
FileOperateHelp.FileCopy("TestFile/mr3.txt", "TestFile/TEST/mr3Copy.txt"); //8.创建文件夹
FileOperateHelp.FolderCreate("TestFile/TEST2"); //9.递归删除文件夹(删除a文件夹)
FileOperateHelp.DeleteFolder("TestFile/TestDel/a/");

2. 在Web程序中进行调用

  public void Index()
{
//1.写文件测试(覆盖写入)
FileOperateHelp.Write_Txt("~/TestFile/mr.txt", "mr123");
FileOperateHelp.Write_Txt("~/TestFile/mr2.txt", "mr123");
//2.读文件测试
string msg1 = FileOperateHelp.Read_Txt("~/TestFile/mr.txt"); //3.写文件测试(追加写入)
FileOperateHelp.WriteFile("~/TestFile/mr.txt", "");
//4.读文件测试
string msg2 = FileOperateHelp.ReadFile("~/TestFile/mr.txt"); //5.删除文件测试
FileOperateHelp.FileDel("~/TestFile/mr2.txt"); //6.移动文件测试
FileOperateHelp.FileMove("~/TestFile/mr.txt", "~/TestFile/TEST/mr移动.txt"); //7.复制文件测试
FileOperateHelp.FileCopy("~/TestFile/mr3.txt", "~/TestFile/TEST/mr3Copy.txt"); //8.创建文件夹
FileOperateHelp.FolderCreate("~/TestFile/TEST2"); //9.递归删除文件夹(删除a文件夹)
FileOperateHelp.DeleteFolder("~/TestFile/TestDel/a/"); }

二. 序列化和反序列化

1. 在.Net中,序列化和反序列化主要有两种 :

  方案一:利用JavaScriptSerializer对象实现,需要添加System.Web.Extensions程序集的引用。

  方案二:利用程序集Newtonsoft.Json.dll来实现。

注意:如果要把某个类序列化,需要在该类上面加一个 [Serializable]属性。

下面分享一个JsonHelp类,该类主要提供两种序列化和反序列化的方法,代码如下:

   public class JsonHelp
{
#region 01-将JSON转换成JSON字符串
/// <summary>
/// 将JSON转换成JSON字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string ObjectToString<T>(T obj)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
return jss.Serialize(obj);
}
#endregion #region 02-将字符串转换成JSON对象
/// <summary>
/// 将字符串转换成JSON对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="content"></param>
/// <returns></returns>
public static T StringToObject<T>(string content)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
return jss.Deserialize<T>(content);
}
#endregion #region 03-将JSON转换成JSON字符串
/// <summary>
///将JSON转换成JSON字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string ToJsonString<T>(T obj)
{
return JsonConvert.SerializeObject(obj);
}
#endregion #region 04-将字符串转换成JSON对象
/// <summary>
/// 将字符串转换成JSON对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="content"></param>
/// <returns></returns>
public static T ToObject<T>(string content)
{
return JsonConvert.DeserializeObject<T>(content);
}
#endregion
}

  2. 代码调用:

                 //1. 将JSON对象转换成JSON字符串
Console.WriteLine("-------------------------------------1. 将JSON转换成JSON字符串------------------------------------------");
var myObj = new
{
id = "",
name = "ypf",
myList = studentList,
myList2 = studentList.Where(u => u.Age > ).Select(u => new
{
t1 = u.Age,
t2 = u.ClassId
}).ToList() };
//1.1 方式一
string myString1 = JsonHelp.ObjectToString(myObj);
//1.2 方式二
string myString2 = JsonHelp.ToJsonString(myObj);
string myString3 = JsonHelp.ToJsonString(studentList);
Console.WriteLine(myString1);
Console.WriteLine(myString2);
//2. 将JSON字符串转换成JSON对象(必须显式的声明对象)
List<Student> myList = JsonHelp.StringToObject<List<Student>>(myString3);
Console.WriteLine(myList);

三. 加密和解密

这里介绍三种加密方式,分别是:

(1). MD5不可逆加密:加密后可以是16位,也可以是32位,任何语言的MD5加密后的结果都相同。

(2). DES可逆对称加密:

  优点:对称加密算法的优点是速度快。

  缺点:密钥管理不方便,要求共享密钥。

  特点:不同写法对应的加密值不同。

(3). RSA可逆非对称加密:

  特点:可逆非对称加密,需要两个Key,公钥和私钥,每次产生的公钥和私钥不一致,加密的结果就不一致

  好处:非对称加密算法的优点是密钥管理很方便,缺点是速度慢。

  特性(重点!!!):需要通过代码来生成一对公钥(加密key)和私钥(解密key),公钥私钥只与是否公开有关。

    A. 如果公开公钥(加密key):只有我接受加密信息才有用,因为只有我有私钥(解密key),能解密。

    B. 如果公开私钥(解密key):用于签名,表示加密数据一定是我发的,因为只有公钥(加密key)。

1. 下面分享两种MD5实现的算法

         /// <summary>
/// MD5加密,和动网上的16/32位MD5加密结果相同,
/// 使用的UTF8编码
/// </summary>
/// <param name="strSource">待加密字串</param>
/// <param name="length">16或32值之一,其它则采用.net默认MD5加密算法</param>
/// <returns>加密后的字串</returns>
public static string Encrypt(string source, int length = )//默认参数
{
HashAlgorithm provider = CryptoConfig.CreateFromName("MD5") as HashAlgorithm;
if (string.IsNullOrEmpty(source)) return string.Empty; byte[] bytes = Encoding.UTF8.GetBytes(source);// Encoding.ASCII.GetBytes(source);
byte[] hashValue = provider.ComputeHash(bytes);
StringBuilder sb = new StringBuilder();
switch (length)
{
case ://16位密文是32位密文的9到24位字符
for (int i = ; i < ; i++)
sb.Append(hashValue[i].ToString("x2"));
break;
case :
for (int i = ; i < ; i++)
{
sb.Append(hashValue[i].ToString("x2"));
}
break;
default:
for (int i = ; i < hashValue.Length; i++)
{
sb.Append(hashValue[i].ToString("x2"));
}
break;
}
return sb.ToString();
}
/// <summary>
/// MD5加密
/// </summary>
/// <param name="str">要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string Md5(string str)
{
var md5 = MD5.Create();
// 计算字符串的散列值
var bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
var sbd = new StringBuilder();
foreach (var item in bytes)
{
sbd.Append(item.ToString("x2"));
}
return sbd.ToString();
}

2. 下面分享两种DES实现的算法

  public class DesEncrypt
{
//8位长度
private static string KEY = "ypf12345";
private static byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(KEY.Substring(, ));
private static byte[] rgbIV = ASCIIEncoding.ASCII.GetBytes(KEY.Insert(, "w").Substring(, )); #region 01-DES加密
/// <summary>
/// DES 加密
/// </summary>
/// <param name="strValue">需要加密的字符串</param>
/// <returns></returns>
public static string Encrypt(string strValue)
{
DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();
using (MemoryStream memStream = new MemoryStream())
{
CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
StreamWriter sWriter = new StreamWriter(crypStream);
sWriter.Write(strValue);
sWriter.Flush();
crypStream.FlushFinalBlock();
memStream.Flush();
return Convert.ToBase64String(memStream.GetBuffer(), , (int)memStream.Length);
}
}
#endregion #region 02-DES解密
/// <summary>
/// DES解密
/// </summary>
/// <param name="EncValue">加密后的结果</param>
/// <returns></returns>
public static string Decrypt(string EncValue)
{
DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();
byte[] buffer = Convert.FromBase64String(EncValue); using (MemoryStream memStream = new MemoryStream())
{
CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
crypStream.Write(buffer, , buffer.Length);
crypStream.FlushFinalBlock();
return ASCIIEncoding.UTF8.GetString(memStream.ToArray());
}
}
#endregion
}
  #region 3.DES加密一个字符串(可逆,非固定)
/// <summary>
/// 加密一个字符串(可逆,非固定)
/// </summary>
/// <param name="str">要加密的字符串</param>
/// <param name="key">加密密钥</param>
/// <returns>加密后的字符串</returns>
public static string EncryptStr(string str, string key = "iceStone")
{
var des = DES.Create();
// var timestamp = DateTime.Now.ToString("HHmmssfff");
var inputBytes = Encoding.UTF8.GetBytes(MixUp(str));
var keyBytes = Encoding.UTF8.GetBytes(key);
SHA1 ha = new SHA1Managed();
var hb = ha.ComputeHash(keyBytes);
var sKey = new byte[];
var sIv = new byte[];
for (var i = ; i < ; i++)
sKey[i] = hb[i];
for (var i = ; i < ; i++)
sIv[i - ] = hb[i];
des.Key = sKey;
des.IV = sIv;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputBytes, , inputBytes.Length);
cs.FlushFinalBlock();
var ret = new StringBuilder();
foreach (var b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
} return ret.ToString();
}
}
}
#endregion #region 4.DES解密一个字符串
/// <summary>
/// 解密一个字符串
/// <param name="str">要解密的字符串</param>
/// <param name="key">加密密钥</param>
/// <returns>解密后的字符串</returns>
public static string DecryptStr(string str, string key = "iceStone")
{
var des = DES.Create();
var inputBytes = new byte[str.Length / ];
for (var x = ; x < str.Length / ; x++)
{
inputBytes[x] = (byte)System.Convert.ToInt32(str.Substring(x * , ), );
}
var keyByteArray = Encoding.UTF8.GetBytes(key);
var ha = new SHA1Managed();
var hb = ha.ComputeHash(keyByteArray);
var sKey = new byte[];
var sIv = new byte[];
for (var i = ; i < ; i++)
sKey[i] = hb[i];
for (var i = ; i < ; i++)
sIv[i - ] = hb[i];
des.Key = sKey;
des.IV = sIv;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inputBytes, , inputBytes.Length);
cs.FlushFinalBlock();
return ClearUp(Encoding.UTF8.GetString(ms.ToArray()));
}
}
}
#endregion

3. 下面分享RSA的代码

  public class RsaEncrypt
{ #region 01-生成公钥和私钥
/// <summary>
/// 生成公钥和私钥
/// </summary>
/// <returns></returns>
public static KeyValuePair<string, string> GetKeyPair()
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
string publicKey = RSA.ToXmlString(false);
string privateKey = RSA.ToXmlString(true);
return new KeyValuePair<string, string>(publicKey, privateKey);
}
#endregion #region 02-加密(传入内容和公钥)
/// <summary>
/// 加密:内容+公钥,事先需要生成公钥和私钥
/// </summary>
/// <param name="content">加密内容</param>
/// <param name="publicKey">公钥</param>
/// <returns></returns>
public static string Encrypt(string content, string publicKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicKey);
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] DataToEncrypt = ByteConverter.GetBytes(content);
byte[] resultBytes = rsa.Encrypt(DataToEncrypt, false);
return Convert.ToBase64String(resultBytes);
}
#endregion #region 03-加密(并返回公钥和私钥)
/// <summary>
/// 加密(并返回公钥和私钥),在该方法中生成了公钥和私钥,并返回
/// </summary>
/// <param name="content">加密内容</param>
/// <param name="publicKey">返还公钥</param>
/// <param name="privateKey">返回密钥</param>
/// <returns>加密后结果</returns>
public static string Encrypt(string content, out string publicKey, out string privateKey)
{
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
publicKey = rsaProvider.ToXmlString(false);
privateKey = rsaProvider.ToXmlString(true);
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] DataToEncrypt = ByteConverter.GetBytes(content);
byte[] resultBytes = rsaProvider.Encrypt(DataToEncrypt, false);
return Convert.ToBase64String(resultBytes);
}
#endregion #region 04-解密(内容+私钥)
/// <summary>
/// 解密-内容+私钥
/// </summary>
/// <param name="content"></param>
/// <param name="privateKey"></param>
/// <returns></returns>
public static string Decrypt(string content, string privateKey)
{
byte[] dataToDecrypt = Convert.FromBase64String(content);
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(privateKey);
byte[] resultBytes = RSA.Decrypt(dataToDecrypt, false);
UnicodeEncoding ByteConverter = new UnicodeEncoding();
return ByteConverter.GetString(resultBytes);
}
#endregion
}

4. 分享加密算法的调用代码

  {
Console.WriteLine("-------------------------------------三.3种加密方式------------------------------------------");
{
Console.WriteLine("----------------------1.MD5加密(加密后结果可以是32位,也可以是16位,主流都采用32位)-----------------------------");
//1.MD5加密(加密后结果可以是32位,也可以是16位,主流都采用32位)
//1.1 写法一
string msg1 = "mr1";
string result1 = MD5Encrypt.Encrypt(msg1);
string result2 = MD5Encrypt.Encrypt(msg1, );
Console.WriteLine(result1);
Console.WriteLine(result2);
//1.2 写法二 .Net 高度封装的MD5方法
string result3 = SecurityHelp.Md5(msg1);
Console.WriteLine(result3);
}
{
Console.WriteLine("----------------------2.对称可逆加密算法DES-----------------------------");
//2.对称加密算法DES
string msg1 = "mr1";
//2.1 写法一:密钥写在DesEncrypt类中了,密钥为ypf12345
string result1 = DesEncrypt.Encrypt(msg1);
string result2 = DesEncrypt.Decrypt(result1);
Console.WriteLine(result1);
Console.WriteLine(result2);
//2.2 写法二
string result3 = SecurityHelp.EncryptStr(msg1, "ypf12345");
string result4 = SecurityHelp.DecryptStr(result3, "ypf12345");
Console.WriteLine(result3);
Console.WriteLine(result4);
}
{
Console.WriteLine("----------------------3.非对称可逆加密算法RSA-----------------------------");
//方式一:先生成公钥和私钥,然后加密和解密
//KeyValuePair是一个键值对, myKey.Key 代表的公钥;myKey.Value 代表的私钥
KeyValuePair<string, string> myKey = RsaEncrypt.GetKeyPair();
string msg1 = "mr1";
//加密
string result1 = RsaEncrypt.Encrypt(msg1, myKey.Key);
//解密
string result2 = RsaEncrypt.Decrypt(result1, myKey.Value);
Console.WriteLine(result1);
Console.WriteLine(result2);
//方式二:直接加密,并通过out参数的形式返回公钥和私钥
string publicKey = "";
string privateKey = "";
//加密
string result3 = RsaEncrypt.Encrypt(msg1, out publicKey, out privateKey);
//解密
string result4 = RsaEncrypt.Decrypt(result3, privateKey);
Console.WriteLine(result3);
Console.WriteLine(result4);
} }

 运行结果:

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

第四节:IO、序列化和反序列化、加密解密技术的更多相关文章

  1. 加密解密技术—Web.config加密和解密

    阅读目录 一:我们为什么要对web.config配置文件中的配置节加密? 二:怎么样加密和解密? 三:实例 四:运行效果 一:我们为什么要对web.config配置文件中的配置节加密? 因为在我们的项 ...

  2. Asp.net中Json的序列化和反序列化(二)

     三.JSON序列化和反序列化日期时间的处理 JSON格式不直接支持日期和时间.DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,其中第一个数字(在提供的示例中 ...

  3. ASP.NET中JSON的序列化和反序列化

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍 ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介 ...

  4. ASP.NET 中JSON 的序列化和反序列化

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...

  5. ASP.NET中JSON的序列化和反序列化(转)

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...

  6. 转:Json序列化和反序列化

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍 ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介 ...

  7. [转]ASP.NET中JSON的序列化和反序列化

    本文转自:http://www.cnblogs.com/zhaozhan/archive/2011/01/09/1931340.html JSON是专门为浏览器中的网页上运行的JavaScript代码 ...

  8. Webservice SOAP传输序列化总结 以及webservice之序列化以及反序列化实例

    一.所有Webservice中传递的对象都必须能够序列化,这个是作为在网络之间传输的必要条件.XML WebService和SOAP标准支持的数据类型如下: 1.基本数据类型. 标准类型,如:int ...

  9. Java之序列化和反序列化

    序列化的对象: package test_demo.SerializableOper; import java.io.Serializable; /* * 序列化对象需要实现序列号接口 * */ pu ...

随机推荐

  1. 目录命令(RD)

    RD命令: // 描述: 删除目录或子目录.同 rmdir // 语法: rd [<drive:>]<path> /s /q /? // 参数: /s: (subdirecto ...

  2. SQLServer之创建AFETER DELETE触发器

    DML AFTER DELETE触发器创建原理 触发器触发时,系统自动在内存中创建deleted表或inserted表,inserted表临时保存了插入或更新后的记录行,deleted表临时保存了删除 ...

  3. LeetCode算法题-Design HashSet(Java实现)

    这是悦乐书的第298次更新,第317篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第166题(顺位题号是705).不使用任何内建的hash表库设计一个hash集合,应包含 ...

  4. HTML,CSS---问题记录

    1,,登录框input和标签垂直方向对不齐,咋解决? 给input框外套一层span标签,给span标签设置宽高,让它和左边或右边的标签对齐. 不要直接给input设置宽高,这样是对不齐的 2,套没有 ...

  5. Offset Management For Apache Kafka With Apache Spark Streaming

    An ingest pattern that we commonly see being adopted at Cloudera customers is Apache Spark Streaming ...

  6. 做自己的docker镜像(基于ubuntu:16.04)

    基于ubuntu:16.04 apt-get update -y apt-get install sudo -y 换源 sudo apt-get install vim sudo vim /etc/a ...

  7. hotspot目录结构

    Hotspot的目录结构 ├─agent Serviceability Agent的客户端实现 ├─make 用来build出HotSpot的各种配置文件 ├─src HotSpot VM的源代码 │ ...

  8. 关于H5页面中生成图片的两种方式!

    前言: 我们在做项目过程中,经常会遇到自定义生成一张图片并可以长按保存.长按保存图片在微信等浏览器中默认就有,那么对于生成图片的有哪些方式呢? 方法一: 利用canvas绘制图形,然后生成图片 代码如 ...

  9. idea免费破解

    1.下载破解补丁. https://pan.baidu.com/s/1pWCr_HIHURSAbGvvo70wKA   密码:pxkv 2.下载idea网址: https://www.jetbrain ...

  10. Kubernetes — 深入解析Pod对象:基本概念(一)

    在上一篇文章中,我详细介绍了 Pod 这个 Kubernetes 项目中最重要的概念. 现在,你已经非常清楚:Pod,而不是容器,才是 Kubernetes 项目中的最小编排单位.将这个设计落实到 A ...