关于最近给一家企业做的文档保全系统的技术整理(1)
上个月刚刚完成了一个项目,该项目用于保护企业中的图纸等文档资源的保密,防止员工通过u盘拷贝等手段泄露企业资源。
现在将该项目中遇到的一些技术点整理出来,和大家一起学习和参考。
- 1、获取局域网内其他主机Mac地址的方法
public class NetHelper { [DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length); [DllImport("Ws2_32.dll")] private static extern Int32 inet_addr(string ip); /// <summary> /// 获取远程IP(不能跨网段)的MAC地址 /// </summary> /// <param name="hostip"></param> /// <returns></returns> public static string GetMacAddress(string hostip) { string Mac = ""; try { Int32 ldest = inet_addr(hostip); //将IP地址从点数格式转换成无符号长整型 Int64 macinfo = new Int64(); Int32 len = 6; SendARP(ldest, 0, ref macinfo, ref len); string TmpMac = Convert.ToString(macinfo, 16).PadLeft(12, '0');//转换成进制注意有些没有十二位 Mac = TmpMac.Substring(0, 2).ToUpper();// for (int i = 2; i < TmpMac.Length; i = i + 2) { Mac = TmpMac.Substring(i, 2).ToUpper() + "-" + Mac; } } catch (Exception Mye) { DSLog.Add("获取远程主机MAC地址异常:" + Mye.Message); // throw new Exception("获取远程主机MAC地址异常:" + Mye.Message); } return Mac; } }
说明:该类提供一个静态方法GetMacAddress用于获取同网段中远程主机的Mac地址,返回的Mac地址形式为:00-00-00-00-00-00
2、以二进制序列化方式打开和存储信息在数据文件中
public class BinarySerializer { public static void Serialize(object data, string filePath) { try { //打开文件 StreamWriter fs = new StreamWriter(filePath, false); try { // 创建其支持存储区为内存的流 MemoryStream streamMemory = new MemoryStream(); // 以二进制格式将对象或整个连接对象图形序列化或反序列化 BinaryFormatter formater = new BinaryFormatter(); //将这个对象序列化到内存流中 formater.Serialize(streamMemory, data); //先转换为字符串的形式 string binaryData = Convert.ToBase64String(streamMemory.GetBuffer()); //将数据写入到文件 fs.Write(binaryData); } catch (Exception ex) { throw ex; } finally { fs.Flush(); fs.Close(); } } catch (Exception ex) { throw ex; } } // 反序列化,从文件序列化一个对象 public static object Deserialize(string filePath) { object data = new object(); try { //打开文件 StreamReader sr = new StreamReader(filePath); try { MemoryStream streamMemory; BinaryFormatter formatter = new BinaryFormatter(); //以字符串的形式读取数据 string cipherData = sr.ReadToEnd(); byte[] binaryData = Convert.FromBase64String(cipherData); //反序列化为对象 streamMemory = new MemoryStream(binaryData); data = formatter.Deserialize(streamMemory); } catch { // 不能得到数据,设为空 data = null; } finally { //最后关闭文件 sr.Close(); } } catch { // 不能得到数据,设为空 data = null; } //返回数据 return data; } }
该类的定义要添加如下命名空间的引用:
using System.IO; using System.Runtime.Serialization.Formatters.Binary;
说明:
假如我要将一个配置字符串信息写入一个数据文件
用法如下:
try { BinarySerializer.Serialize("要写入数据文件的配置信息字符串", "数据文件的完整路径" ); return true; } catch (Exception ex) { throw new Exception("将系统设置写入文档时异常:" + ex.Message); }
要读取该配置字符串信息的时候用法:
string configString = BinarySerializer.Deserialize(APPInfo.ClientConfigFile).ToString(); return Convert(configString);
用记事本直接打开配置文件将看到的是乱码。
浙公网安备 33010602011771号