简单的加密设计

来源:互联网 发布:浙江大学网络教育证书 编辑:程序博客网 时间:2024/05/01 15:22

一般我们加密码要用MD5,DES等等一些算法,在.NET中集成了大量的加秘类

不过对于简单的加密处理是否有必要那么复杂?

对于要加密保护不强的东西,完全定义一种自己的设计也不错,就是用一个密钥+随即码转化成特殊字符

但随机码和钥怎样组合就是重要的了:

下面是个简单例子:

 public class EncryptString
    
{
        
public static string key = "FireBird";//密钥

        
/// <summary>
        
/// 将明文加密码
        
/// </summary>
        
/// <param name="uid">用户名</param>
        
/// <param name="key">加密明文</param>
        
/// <returns>6位随机数+key+UID+5位随机数字</returns>

        public static string Encrypt(string uid) / /这里用了静态方法
        
{
            
int number;
            
char code;
            
string checkCode = String.Empty;
            Random random 
= new Random();

            
for (int i = 0; i < 6; i++)
            
{
                number 
= random.Next();

                
if (number % 2 == 0)
                    code 
= (char)('0' + (char)(number % 10));
                
else
                    code 
= (char)('A' + (char)(number % 26));

                checkCode 
+= code.ToString();
            }

            
string encryptText = checkCode + "|" + key + "|" + uid + "|" + random.Next(100000);

            
return encryptText;
        }

    }

上面的代码生成要加密的明文,其主要是给UID加密,KEY是钥匙

 下面进行加密码

public bool EncryptConvert(string uid)
    
{
        
string encryptText = Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(EncryptString.Encrypt(uid))).Replace("+""%2B");//加密(调用静态明文生成方法)
        if (Decrypt(encryptText, uid))//调用解密方法
        {
            Session.Add(SystemConst.KEY_CACHE_STUDENT, uid);
            
return true;
            
        }

        
else
        
{
            
return false;
        }

    }

 下面定义解密:

  public bool Decrypt(string encryptText,string uid)
    
{
        
string decryptText = System.Text.Encoding.Default.GetString(Convert.FromBase64String(encryptText.ToString().Replace("%2B""+")));
        
string[] decrypt = decryptText.Split('|');
        
if (decrypt[1].ToString().Trim() == EncryptString.key.ToString().Trim())
        
{
            
return true;
        }

        
else
        
{
            
return false;
        }

    }

以上代码实现了整个加密,解密过程,在加密方法中EncryptConvert()同时调用了下面的解密方法,读这可将他们分离

实现独立的两个方法,并且在真正用到时建议把密钥用字节数组的方式分散到随机数中,比如:

随机器数+1位密钥匙+随即数+1位密钥+随机数......这样在变换时一般是察觉不到变化的,除非有人刻意去攻击你

你还可以把密钥中的某个定意成一定规律递增或减少

这样就实现的简单的加密码,我主要是用于一次性地址转向:)