技术文章 > 加密/解密字符串

加密/解密字符串

2018-10-18 00:01

文档管理软件,文档管理系统,知识管理系统,档案管理系统的技术资料:
以下分别是使用了不同的加密方法加密/解密字符串:DES HMACSHA1 SHA1 RC2 MD5 等,待续
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
namespace Crypt
{
class Crypt
{
[STAThread]
public static void Main(string[] args)
{
string Line;
string Key;
string IV;
string Text;
Console.WriteLine(“Input DES,SHA1 key:“);
Key=Console.ReadLine()+“ “;
Key=Key.Substring(0,8);
Console.WriteLine(“Input DES IV:“);
IV=Console.ReadLine()+“ “;
IV=Key.Substring(0,8);
Console.WriteLine(“Input text:“);
Text=Console.ReadLine();
Line=Crypt.DESEncrypt(Text,Key,IV);
//DES Crypt
Console.WriteLine(“DES Crypt:{0}“,Line);
//MD5 Crypt
Console.WriteLine(“MD5 Crypt:{0}“,Crypt.MD5Encrypt(Text));
//HMACSHA1 Crypt
Console.WriteLine(“HMACSHA1 Crypt:{0}“,Crypt.HMACSHA1Encrypt(Text,Key));
//SHA1 Crypt
Console.WriteLine(“SHA1 Crypt:{0}“,Crypt.SHA1Encrypt(Text));
//RC2 Crypt
RC2 myRC2=new RC2(Text);
Console.WriteLine(“RC2 Crypt:{0}“,myRC2.RC2Encrypt());
/**//*
Start decrypt
*/
Console.WriteLine(“Press any key to decrypt.“);
Console.ReadLine();
//DES decrypt
Console.WriteLine(“DES decrypt:{0}“,Crypt.DESDecrypt(Line,Key,IV));
//RC2 decrypt
Console.WriteLine(“RC2 decrypt:{0}“,myRC2.RC2Decrypt());
Console.WriteLine(“Press any key to exit.“);
Console.ReadLine();
}
class RC2
{
private byte[] Key;
private byte[] IV;
private byte[] orgText;
private byte[] encryptText;
private byte[] decryptText;
public RC2(string rc2Text)
{
orgText=Encoding.Default.GetBytes(rc2Text);
RC2CryptoServiceProvider myRC2=new RC2CryptoServiceProvider();
myRC2.GenerateIV();
myRC2.GenerateKey();
Key=myRC2.Key;
IV=myRC2.IV;
}
public string RC2Encrypt()
{
RC2CryptoServiceProvider myRC2=new RC2CryptoServiceProvider();
ICryptoTransform myCryptoTrans=myRC2.CreateEncryptor(Key,IV);
MemoryStream MStream=new MemoryStream();
CryptoStream CStream=new CryptoStream(MStream,myCryptoTrans,CryptoStreamMode.Write);
CStream.Write(orgText,0,orgText.Length);
CStream.FlushFinalBlock();
StringBuilder EnText=new StringBuilder();
encryptText=MStream.ToArray();
foreach(byte Byte in encryptText)
{
EnText.AppendFormat(“{0:x2}“,Byte);
}
CStream.Close();
return EnText.ToString();
}
public string RC2Decrypt()
{
RC2CryptoServiceProvider myRC2=new RC2CryptoServiceProvider();
ICryptoTransform myCryptoTrans=myRC2.CreateDecryptor(Key,IV);
MemoryStream MStream=new MemoryStream(encryptText);
CryptoStream CStream=new CryptoStream(MStream,myCryptoTrans,CryptoStreamMode.Read);
decryptText=new byte[encryptText.Length];
CStream.Read(decryptText,0,decryptText.Length);
StringBuilder EnText=new StringBuilder();
CStream.Close();
ASCIIEncoding myText=new ASCIIEncoding();
return myText.GetString(decryptText);
}
}
public static string SHA1Encrypt(string EncryptText)
{
byte[] StrRes=Encoding.Default.GetBytes(EncryptText);
HashAlgorithm mySHA=new SHA1CryptoServiceProvider();
StrRes=mySHA.ComputeHash(StrRes);
StringBuilder EnText=new StringBuilder();
foreach(byte Byte in StrRes)
{
EnText.AppendFormat(“{0:x2}“,Byte);
}
return EnText.ToString();
}
public static string HMACSHA1Encrypt(string EncryptText,string EncryptKey)
{
byte[] StrRes=Encoding.Default.GetBytes(EncryptText);
HMACSHA1 myHMACSHA1=new HMACSHA1(Encoding.Default.GetBytes(EncryptKey));
CryptoStream CStream=new CryptoStream(Stream.Null,myHMACSHA1,CryptoStreamMode.Write);
CStream.Write(StrRes,0,StrRes.Length);
StringBuilder EnText=new StringBuilder();
foreach(byte Byte in StrRes)
{
EnText.AppendFormat(“{0:x2}“,Byte);
}
return EnText.ToString();
}
public static string MD5Encrypt(string CryptText)
{
MD5 myMD5=new MD5CryptoServiceProvider();
byte[] HashCode;
HashCode=Encoding.Default.GetBytes(CryptText);
HashCode=myMD5.ComputeHash(HashCode);
StringBuilder EnText=new StringBuilder();
foreach(byte Byte in HashCode)
{
EnText.AppendFormat(“{0:x2}“,Byte);
}
return EnText.ToString();
}
public static string DESEncrypt(string CryptText, string CryptKey,string CryptIV)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] textOut = Encoding.Default.GetBytes(CryptText);
byte[] DESKey=ASCIIEncoding.ASCII.GetBytes(CryptKey);
byte[] DESIV=ASCIIEncoding.ASCII.GetBytes(CryptKey);
MemoryStream MStream = new MemoryStream();
CryptoStream CStream = new CryptoStream(MStream, des.CreateEncryptor(DESKey,DESIV),CryptoStreamMode.Write);
CStream.Write(textOut, 0, textOut.Length);
CStream.FlushFinalBlock();
StringBuilder StrRes = new StringBuilder();
foreach(byte Byte in MStream.ToArray())
{
StrRes.AppendFormat(“{0:x2}“, Byte);
}
return StrRes.ToString();
}
public static string DESDecrypt(string CryptText, string CryptKey,string CryptIV)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] textOut = new byte[CryptText.Length / 2];
for(int Count = 0; Count < CryptText.Length; Count+=2)
{
textOut[Count/2] = (byte)(Convert.ToInt32(CryptText.Substring(Count , 2), 16));
}
byte[] DESKey=ASCIIEncoding.ASCII.GetBytes(CryptKey);
byte[] DESIV=ASCIIEncoding.ASCII.GetBytes(CryptIV);
MemoryStream MStream = new MemoryStream();
CryptoStream CStream = new CryptoStream(MStream, des.CreateDecryptor(DESKey,DESIV),CryptoStreamMode.Write);
CStream.Write(textOut, 0, textOut.Length);
CStream.FlushFinalBlock();
return System.Text.Encoding.Default.GetString(MStream.ToArray());
}
}
}

调试结果
================
Input DES,SHA1 key:
hello
Input DES IV:
world
Input text:
I am a boy my name is DexiangWu
DES Crypt:9e701e4e8f55714bc68253d2ddf53fb6fd6a64df7f6b78f9491a64df18113642
MD5 Crypt:f7d88e861602d2e1e0992dd70967314e
HMACSHA1 Crypt:4920616d206120626f79206d79206e616d652069732044657869616e675775
SHA1 Crypt:d5b25333f3e01ba96ac281e111af08701a7ccfb0
RC2 Crypt:82cc5c822272a721db753e15d918c0d20e62322316fdd4a4d881b8eb03ff55e3
Press any key to decrypt.
DES decrypt:I am a boy my name is DexiangWu
RC2 decrypt:I am a boy my name is DexiangWu