一般我們加密碼要用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位密鑰+隨機數......這樣在變換時一般是察覺不到變化的,除非有人刻意去攻擊你
你還可以把密鑰中的某個定意成一定規律遞增或減少
這樣就實現的簡單的加密碼,我主要是用於一次性地址轉向:)