// 文件:ParamHashtable.cs, MiniHashtable.cs, Key.cs, MiniDes.cs, CodeSign.cs // 测试 // 加载数据 ParamHashtable mymh = new ParamHashtable(); mymh.Add( " jobPositionClass " , 160 ); mymh.Add( " jobPositionID " , - 1 ); mymh.Add( " area " , - 1 ); mymh.Add( " industry " , - 1 ); mymh.Add( " keyword " , " 软件工程师@!@#$%^!·#¥%……软件工程师 " ); string str = mymh.GetData; Response.Write( " 原文: " + str + " <br> " ); Response.Write( " <hr> " ); // 签名 string b = CodeSign.AddSign(str); Response.Write( " 签名: " + b + " <br> " ); Response.Write( " <hr> " ); // 加密 string a = MiniDes.Encrypt(b); Response.Write( " 加密: " + a + " <br> " ); Response.Write( " <hr> " ); Response.Write( " <br><br><font color=red>………………………………………………………………………………………………………… " + " <br> " ); Response.Write( " 发送…………>接收 " + " <br> " ); Response.Write( " ………………………………………………………………………………………………………… " + " <br><br><br></font> " ); // 解密 string d = MiniDes.Decrypt(a); Response.Write( " 解密: " + d + " <br> " ); Response.Write( " <hr> " ); // 验签 bool c = CodeSign.CheckSign(d); Response.Write( " 验签: " + c + " <br> " ); Response.Write( " <hr> " ); // 验签正确,取原文 string f = CodeSign.GetData(d); Response.Write( " 原文: " + str + " <br> " ); Response.Write( " <hr> " ); // 加载数据并输出 ParamHashtable mymh1 = new ParamHashtable(); mymh1.Add(f); for ( int i = 0 ; i < mymh1.Length; i ++ ) Response.Write(mymh1.Name(i) + " : " + mymh1[i] + " <br> " ); MiniHashtable.cs public class MiniHashtable ... { struct StructNameValue ...{ public Object itemName; public Object itemValue; public void SetValue(Object objName, Object objValue) ...{ itemName = objName; itemValue = objValue; } } private ArrayList m_alNV; public MiniHashtable() ...{ m_alNV = new ArrayList(); } public void Add(Object objName, Object objValue) ...{ StructNameValue snvItem = new StructNameValue(); snvItem.SetValue(objName, objValue); m_alNV.Add(snvItem); } public Object this[Object objName] ...{ get ...{ for (int i = 0; i < m_alNV.Count; i++) ...{ StructNameValue snvItem = (StructNameValue)m_alNV[i]; if (snvItem.itemName.Equals(objName)) return snvItem.itemValue; } return null; } } public Object this[int iIndex] ...{ get ...{ if (iIndex < m_alNV.Count) ...{ StructNameValue snvItem = (StructNameValue)m_alNV[iIndex]; return snvItem.itemValue; } else ...{ return null; } } } public Object Name(int iIndex) ...{ if (iIndex < m_alNV.Count) ...{ StructNameValue snvItem = (StructNameValue)m_alNV[iIndex]; return snvItem.itemName; } else ...{ return null; } } public int Length ...{ get ...{ return m_alNV.Count; } } public void Clear() ...{ m_alNV.Clear(); } } ParamHashtable.cs public class ParamHashtable : MiniHashtable ... { public ParamHashtable() ...{ } public string GetData ...{ get ...{ string m_tempStr = ""; for (int i = 0; i < base.Length; i++) ...{ if (i < base.Length - 1) m_tempStr += base.Name(i) + "=" + base[i] + "&"; else m_tempStr += base.Name(i) + "=" + base[i]; } return m_tempStr; } } public void Add(string addHashTableStr) ...{ base.Clear(); string[] m_strSplit = addHashTableStr.Split(new char[] ...{ '=', '&' }, StringSplitOptions.None); for (int i = 0; i < m_strSplit.Length - 1; i++) ...{ base.Add(m_strSplit[i], m_strSplit[i + 1]); i += 1; } } }