ดู plaincopy ไปที่ clipboardprint หรือไม่
//เนมสเปซ
ใช้ระบบ;
ใช้ System.Security.Cryptography;
ใช้ System.IO;
ใช้ System.Text;
//วิธี
// วิธีการเข้ารหัส
เข้ารหัสสตริงสาธารณะ (สตริง pToEncrypt, สตริง sKey)
-
DESCryptoServiceProvider des = DESCryptoServiceProvider ใหม่ ();
//ใส่สตริงลงในอาร์เรย์ไบต์
//ฉันเปลี่ยนการเข้ารหัส UTF8 ที่แต่เดิมใช้เป็นการเข้ารหัส Unicode แต่มันใช้งานไม่ได้
ไบต์[] inputByteArray = การเข้ารหัส.Default.GetBytes(pToEncrypt);
//ไบต์[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//สร้างคีย์และออฟเซ็ตของออบเจ็กต์ที่เข้ารหัส
//ข้อความต้นฉบับใช้วิธี GetBytes ของวิธี ASCIIEncoding.ASCII
// ทำให้จำเป็นต้องป้อนข้อความภาษาอังกฤษเมื่อป้อนรหัสผ่าน
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = MemoryStream ใหม่ ();
CryptoStream cs = CryptoStream ใหม่ (ms, des.CreateEncryptor (), CryptoStreamMode.Write);
//เขียนอาร์เรย์ไบต์ลงในสตรีม crypto
//(มันจะจบลงในสตรีมหน่วยความจำ)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//รับข้อมูลกลับจากสตรีมหน่วยความจำและเข้าสู่สตริง
StringBuilder ret = ใหม่ StringBuilder();
foreach(ไบต์ b ใน ms.ToArray())
-
//จัดรูปแบบเป็นเลขฐานสิบหก
ret.AppendFormat("{0:X2}", b);
-
ret.ToString();
กลับ ret.ToString();
-
//วิธีการถอดรหัส
ถอดรหัสสตริงสาธารณะ (สตริง pToDecrypt, สตริง sKey)
-
DESCryptoServiceProvider des = DESCryptoServiceProvider ใหม่ ();
//ใส่สตริงอินพุตลงในอาร์เรย์ไบต์
ไบต์ [] inputByteArray = ไบต์ใหม่ [pToDecrypt.Length / 2];
สำหรับ (int x = 0; x < pToDecrypt.Length / 2; x++)
-
int i = (แปลง.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (ไบต์)i;
-
//สร้างคีย์และออฟเซ็ตของออบเจ็กต์ที่เข้ารหัส ค่านี้มีความสำคัญและไม่สามารถแก้ไขได้
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = MemoryStream ใหม่ ();
CryptoStream cs = CryptoStream ใหม่ (ms, des.CreateDecryptor (), CryptoStreamMode.Write);
//ล้างข้อมูลผ่านสตรีม crypto ลงในสตรีมหน่วยความจำ
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//รับข้อมูลที่ถอดรหัสกลับจากสตรีมหน่วยความจำ
//สร้างวัตถุ StringBuild CreateDecrypt ใช้วัตถุกระแสข้อมูล และข้อความที่ถอดรหัสจะต้องเปลี่ยนเป็นวัตถุกระแสข้อมูล
StringBuilder ret = ใหม่ StringBuilder();
กลับ System.Text.Encoding.Default.GetString(ms.ToArray());
-
//-------รหัสเสร็จสมบูรณ์--------------------
//พื้นที่ชื่อ
ใช้ระบบ;
ใช้ System.Security.Cryptography;
ใช้ System.IO;
ใช้ System.Text;
//วิธี
// วิธีการเข้ารหัส
เข้ารหัสสตริงสาธารณะ (สตริง pToEncrypt, สตริง sKey)
-
DESCryptoServiceProvider des = DESCryptoServiceProvider ใหม่ ();
//ใส่สตริงลงในอาร์เรย์ไบต์
//ฉันเปลี่ยนการเข้ารหัส UTF8 ที่แต่เดิมใช้เป็นการเข้ารหัส Unicode แต่มันใช้งานไม่ได้
ไบต์[] inputByteArray = การเข้ารหัส.Default.GetBytes(pToEncrypt);
//ไบต์[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//สร้างคีย์และออฟเซ็ตของออบเจ็กต์ที่เข้ารหัส
//ข้อความต้นฉบับใช้วิธี GetBytes ของวิธี ASCIIEncoding.ASCII
// ทำให้จำเป็นต้องป้อนข้อความภาษาอังกฤษเมื่อป้อนรหัสผ่าน
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = MemoryStream ใหม่ ();
CryptoStream cs = CryptoStream ใหม่ (ms, des.CreateEncryptor (), CryptoStreamMode.Write);
//เขียนอาร์เรย์ไบต์ลงในสตรีม crypto
//(มันจะจบลงในสตรีมหน่วยความจำ)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//รับข้อมูลกลับจากสตรีมหน่วยความจำและเข้าสู่สตริง
StringBuilder ret = ใหม่ StringBuilder();
foreach(ไบต์ b ใน ms.ToArray())
-
//จัดรูปแบบเป็นเลขฐานสิบหก
ret.AppendFormat("{0:X2}", b);
-
ret.ToString();
กลับ ret.ToString();
-
//วิธีการถอดรหัส
ถอดรหัสสตริงสาธารณะ (สตริง pToDecrypt, สตริง sKey)
-
DESCryptoServiceProvider des = DESCryptoServiceProvider ใหม่ ();
//ใส่สตริงอินพุตลงในอาร์เรย์ไบต์
ไบต์ [] inputByteArray = ไบต์ใหม่ [pToDecrypt.Length / 2];
สำหรับ (int x = 0; x < pToDecrypt.Length / 2; x++)
-
int i = (แปลง.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (ไบต์)i;
-
//สร้างคีย์และออฟเซ็ตของออบเจ็กต์ที่เข้ารหัส ค่านี้มีความสำคัญและไม่สามารถแก้ไขได้
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = MemoryStream ใหม่ ();
CryptoStream cs = CryptoStream ใหม่ (ms, des.CreateDecryptor (), CryptoStreamMode.Write);
//ล้างข้อมูลผ่านสตรีม crypto ลงในสตรีมหน่วยความจำ
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//รับข้อมูลที่ถอดรหัสกลับจากสตรีมหน่วยความจำ
//สร้างวัตถุ StringBuild CreateDecrypt ใช้วัตถุกระแสข้อมูล และข้อความที่ถอดรหัสจะต้องเปลี่ยนเป็นวัตถุกระแสข้อมูล
StringBuilder ret = ใหม่ StringBuilder();
กลับ System.Text.Encoding.Default.GetString(ms.ToArray());
-
//------โค้ดเสร็จสมบูรณ์----------
หมายเหตุ: เมื่อป้อนรหัสผ่านใน sKey คุณต้องใช้อักขระภาษาอังกฤษซึ่งคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ และจำนวนอักขระคือ 8 ไม่มากหรือน้อย มิฉะนั้นจะเกิดข้อผิดพลาด
ฉันใช้ Windows2000 Server .Net Framework SP3 และใช้งานได้สำเร็จภายใต้ asp.net ภายใต้ VS.Net และการเข้ารหัสและถอดรหัสเป็นเรื่องปกติ!