http://msdn.microsoft.com/en-us/library/system.security.cryptography(v=vs.110).aspx
Một số code mẫu:
MD5 Hash
DES
TripleDES
Rijndael
Rijndael chuỗi
EncodingUTF8
Chương trình Demo cho thuật toán Rijndael: ( Vào mục hỏi đáp để yêu cầu cần source code tham khảo)
Một số code mẫu:
MD5 Hash
//MD5 Hash
public class MD5Hash
{
// Hash an input string and return the hash as
// a 32 character hexadecimal string.
public static string Encoded(string input)
{
// Create a new instance of the MD5CryptoServiceProvider object.
MD5 md5Hasher = MD5.Create();
// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
// Return the hexadecimal string.
return sBuilder.ToString();
}
// Verify a hash against a string.
public static bool Verify(string input, string hash)
{
// Hash the input.
string hashOfInput = Encoded(input);
// Create a StringComparer an comare the hashes.
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
if (0 == comparer.Compare(hashOfInput, hash))
{
return true;
}
else
{
return false;
}
}
}
DES
public class DES
{
static byte[] bytes = ASCIIEncoding.ASCII.GetBytes("MQTUTEHY");
///
/// Encrypt a string.
///
/// The original string.
///The encrypted string.
///This exception will be thrown when the original string is null or empty.
public static string Encrypt(string originalString)
{
if (String.IsNullOrEmpty(originalString))
{
throw new ArgumentNullException("The string which needs to be encrypted can not be null.");
}
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(bytes, bytes), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cryptoStream);
writer.Write(originalString);
writer.Flush();
cryptoStream.FlushFinalBlock();
writer.Flush();
return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
}
///
/// Decrypt a crypted string.
///
/// The crypted string.
///The decrypted string.
///This exception will be thrown when the crypted string is null or empty.
public static string Decrypt(string cryptedString)
{
if (String.IsNullOrEmpty(cryptedString))
{
throw new ArgumentNullException("The string which needs to be decrypted can not be null.");
}
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(cryptedString));
CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(bytes, bytes), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cryptoStream);
return reader.ReadToEnd();
}
}
TripleDES
class TrippleDESCSPSample
{
static void Main()
{
try
{
// Create a new TripleDESCryptoServiceProvider object
// to generate a key and initialization vector (IV).
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();
// Create a string to encrypt.
string sData = "Here is some data to encrypt.";
// Encrypt the string to an in-memory buffer.
byte[] Data = EncryptTextToMemory(sData, tDESalg.Key, tDESalg.IV);
// Decrypt the buffer back to a string.
string Final = DecryptTextFromMemory(Data, tDESalg.Key, tDESalg.IV);
// Display the decrypted string to the console.
Console.WriteLine(Final);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public static byte[] EncryptTextToMemory(string Data, byte[] Key, byte[] IV)
{
try
{
// Create a MemoryStream.
MemoryStream mStream = new MemoryStream();
// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream(mStream,
new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV),
CryptoStreamMode.Write);
// Convert the passed string to a byte array.
byte[] toEncrypt = new ASCIIEncoding().GetBytes(Data);
// Write the byte array to the crypto stream and flush it.
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
// Get an array of bytes from the
// MemoryStream that holds the
// encrypted data.
byte[] ret = mStream.ToArray();
// Close the streams.
cStream.Close();
mStream.Close();
// Return the encrypted buffer.
return ret;
}
catch(CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
}
public static string DecryptTextFromMemory(byte[] Data, byte[] Key, byte[] IV)
{
try
{
// Create a new MemoryStream using the passed
// array of encrypted data.
MemoryStream msDecrypt = new MemoryStream(Data);
// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV),
CryptoStreamMode.Read);
// Create buffer to hold the decrypted data.
byte[] fromEncrypt = new byte[Data.Length];
// Read the decrypted data out of the crypto stream
// and place it into the temporary buffer.
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
//Convert the buffer into a string and return it.
return new ASCIIEncoding().GetString(fromEncrypt);
}
catch(CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
}
}
Rijndael
private static bool CryptStreamExecute(FileStream fin, FileStream fout, String strKey, String strIV,bool bEncypt=true)
{
try
{
SymmetricAlgorithm rijn = SymmetricAlgorithm.Create("Rijndael");
rijn.Padding = pdMode;
rijn.Mode = cpMode;
byte[] rgbIV = Encoding.ASCII.GetBytes(strIV);
byte[] key = Encoding.ASCII.GetBytes(strKey);
CryptoStream cs ;
if(bEncypt)
cs = new CryptoStream(fout, rijn.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
else
cs = new CryptoStream(fout, rijn.CreateDecryptor(key, rgbIV), CryptoStreamMode.Write);
int rdlen = 0;
int len = 0;
long itoend = fin.Length;
byte[] bData = new byte[16];
while (rdlen < itoend)
{
len = fin.Read(bData, 0, 16);
cs.Write(bData, 0, len);
rdlen = rdlen + len;
}
fin.Close();
cs.Close();
return true;
}
catch (Exception e)
{
return false;
}
}
Rijndael chuỗi
public static string Encode(string source,String strKey, String strIV)
{
byte[] binarySource = Encoding.UTF8.GetBytes(source);
System.Security.Cryptography.SymmetricAlgorithm rijn = System.Security.Cryptography.SymmetricAlgorithm.Create("Rijndael");
rijn.Padding = PaddingMode.PKCS7;
MemoryStream ms = new MemoryStream();
byte[] rgbIV = Encoding.ASCII.GetBytes(strIV);
byte[] key = Encoding.ASCII.GetBytes(strKey);
CryptoStream cs = new CryptoStream(ms, rijn.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
cs.Write(binarySource, 0, binarySource.Length);
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
private static string Decode(string source, String strKey, String strIV)
{
byte[] binarySource = Convert.FromBase64String(source);
MemoryStream ms = new MemoryStream();
System.Security.Cryptography.SymmetricAlgorithm rijn = System.Security.Cryptography.SymmetricAlgorithm.Create("Rijndael");
rijn.Padding = PaddingMode.PKCS7;
byte[] rgbIV = Encoding.ASCII.GetBytes(strIV);
byte[] key = Encoding.ASCII.GetBytes(strKey);
CryptoStream cs = new CryptoStream(ms, rijn.CreateDecryptor(key, rgbIV),
CryptoStreamMode.Write);
cs.Write(binarySource, 0, binarySource.Length);
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
EncodingUTF8
public class EnCodingUTF8
{
public static string Encode(string input)
{
input = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(input));
string str = "";
foreach (char c in input)
{
if (char.IsLower(c))
str += char.ToUpper(c);
else
str += char.ToLower(c);
}
return str;
}
public static string Decode(string input)
{
string str = "";
foreach (char c in input)
{
if (char.IsLower(c))
str += char.ToUpper(c);
else
str += char.ToLower(c);
}
byte[] b = Convert.FromBase64String(str);
return UTF8Encoding.UTF8.GetString(b);
}
}
Chương trình Demo cho thuật toán Rijndael: ( Vào mục hỏi đáp để yêu cầu cần source code tham khảo)
0 nhận xét:
Đăng nhận xét