不可逆加密算法的特征是加密過(guò)程中不需要使用密鑰,輸入明文后由系統直接經(jīng)過(guò)加密算法處理成密文,這種加密后的數據是無(wú)法被解密的, 只有重新輸入明文,并再次經(jīng)過(guò)同樣不可逆的加密算法處理,得到相同的加密密文并被系統重新識別后,才能真正解密。顯然,在這類(lèi)加密 過(guò)程中,加密是自己,解密還得是自己,而所謂解密,實(shí)際上就是重新加一次密,所應用的“密碼”也就是輸入的明文。不可逆加密算法不 存在密鑰保管和分發(fā)問(wèn)題,非常適合在分布式網(wǎng)絡(luò )系統上使用,但因加密計算復雜,工作量相當繁重,通常只在數據量有限的情形下使用, 如廣泛應用在計算機系統中的口令加密,利用的就是不可逆加密算法。近年來(lái),隨著(zhù)計算機系統性能的不斷提高,不可逆加密的應用領(lǐng)域正 在逐漸增大。在計算機網(wǎng)絡(luò )中應用較多不可逆加密算法的有RSA公司發(fā)明的MD5算法和由美國國家標準局建議的不可逆加密標準SHS(Secure Hash Standard:安全雜亂信息標準)等。 不可逆就是假如有兩個(gè)密碼3和4,我的加密算法很簡(jiǎn)單就是3+4,結果是7,但是通過(guò)7我不可能確定那兩個(gè)密碼是3和4,有很多種組合, 這就是最簡(jiǎn)單的不可逆,所以只能通過(guò)暴力破解一個(gè)一個(gè)的試. using System;
using System.IO;
using System.Security.Cryptography;
namespace Common
{
/// <summary>
///Copyright (C), 2004, kwklover(鄺偉科)
///File name:Hasher.cs
///Author:鄺偉科 Version:1.0 Date:2004年4月22日
///Description:哈希(不可逆)加密通用類(lèi)庫函數
/// </summary>
public class Hasher
{
private byte[] _HashKey; //哈希密鑰存儲變量
private string _HashText; //待加密的字符串
public Hasher()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
/// <summary>
/// 哈希密鑰
/// </summary>
public byte[] HashKey
{
set
{
_HashKey=value;
}
get
{
return _HashKey;
}
}
/// <summary>
/// 需要產(chǎn)生加密哈希的字符串
/// </summary>
public string HashText
{
set
{
_HashText=value;
}
get
{
return _HashText;
}
}
/// <summary>
/// 使用HMACSHA1類(lèi)產(chǎn)生長(cháng)度為 20 字節的哈希序列。需提供相應的密鑰,接受任何大小的密鑰。
/// </summary>
/// <returns></returns>
public string HMACSHA1Hasher()
{
byte[] HmacKey=HashKey;
byte[] HmacData=System.Text.Encoding.UTF8.GetBytes(HashText);
HMACSHA1 Hmac = new HMACSHA1(HmacKey);
CryptoStream cs = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write);
cs.Write(HmacData, 0, HmacData.Length);
cs.Close();
byte[] Result=Hmac.Hash;
return Convert.ToBase64String(Result); //返回長(cháng)度為28字節字符串
}
/// <summary>
/// 使用MACTripleDES類(lèi)產(chǎn)生長(cháng)度為 8 字節的哈希序列。需提供相應的密鑰,密鑰長(cháng)度可為 8、16 或 24 字節的密鑰。
/// </summary>
/// <returns></returns>
public string MACTripleDESHasher()
{
byte[] MacKey=HashKey;
byte[] MacData=System.Text.Encoding.UTF8.GetBytes(HashText);
MACTripleDES Mac=new MACTripleDES(MacKey);
byte[] Result=Mac.ComputeHash(MacData);
return Convert.ToBase64String(Result); //返回長(cháng)度為12字節字符串
}
/// <summary>
/// 使用MD5CryptoServiceProvider類(lèi)產(chǎn)生哈希值。不需要提供密鑰。
/// </summary>
/// <returns></returns>
public string MD5Hasher()
{
byte[] MD5Data=System.Text.Encoding.UTF8.GetBytes(HashText);
MD5 Md5=new MD5CryptoServiceProvider();
byte[] Result=Md5.ComputeHash(MD5Data);
return Convert.ToBase64String(Result); //返回長(cháng)度為25字節字符串
}
/// <summary>
/// 使用SHA1Managed類(lèi)產(chǎn)生長(cháng)度為160位哈希值。不需要提供密鑰。
/// </summary>
/// <returns></returns>
public string SHA1ManagedHasher()
{
byte[] SHA1Data=System.Text.Encoding.UTF8.GetBytes(HashText);
SHA1Managed Sha1=new SHA1Managed();
byte[] Result=Sha1.ComputeHash(SHA1Data);
return Convert.ToBase64String(Result); //返回長(cháng)度為28字節的字符串
}
/// <summary>
/// 使用SHA256Managed類(lèi)產(chǎn)生長(cháng)度為256位哈希值。不需要提供密鑰。
/// </summary>
/// <returns></returns>
public string SHA256ManagedHasher()
{
byte[] SHA256Data=System.Text.Encoding.UTF8.GetBytes(HashText);
SHA256Managed Sha256=new SHA256Managed();
byte[] Result=Sha256.ComputeHash(SHA256Data);
return Convert.ToBase64String(Result); //返回長(cháng)度為44字節的字符串
}
/// <summary>
/// 使用SHA384Managed類(lèi)產(chǎn)生長(cháng)度為384位哈希值。不需要提供密鑰。
/// </summary>
/// <returns></returns>
public string SHA384ManagedHasher()
{
byte[] SHA384Data=System.Text.Encoding.UTF8.GetBytes(HashText);
SHA384Managed Sha384=new SHA384Managed();
byte[] Result=Sha384.ComputeHash(SHA384Data);
return Convert.ToBase64String(Result); //返回長(cháng)度為64字節的字符串
}
/// <summary>
/// 使用SHA512Managed類(lèi)產(chǎn)生長(cháng)度為512位哈希值。不需要提供密鑰。
/// </summary>
/// <returns></returns>
public string SHA512ManagedHasher()
{
byte[] SHA512Data=System.Text.Encoding.UTF8.GetBytes(HashText);
SHA512Managed Sha512=new SHA512Managed();
byte[] Result=Sha512.ComputeHash(SHA512Data);
return Convert.ToBase64String(Result); //返回長(cháng)度為88字節的字符串
}
}
}