一个简单的c#加密,签名,验签,解密算法.(1)

本文介绍了一个使用自定义哈希表进行数据签名及加密解密的过程。通过实例展示了如何构造哈希表、生成数据签名、加密数据、验证签名及还原原始数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 //文件: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;
            }

        }

    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值