前言:
好久没有写C#代码了,很多原因吧,还是需要重新整装上阵,后续可能会写更多C#的文章,算是自己的工作积累吧。
关于密码加密有很多方法,这里先介绍utf-8这种方法,后续有机会再更新更多方法吧。
下面是demo的界面
1、在Form1.cs里面的
using System; using System.Text; using System.Windows.Forms; using System.IO; using System.Security.Cryptography; using Machine_LogCopy.Data.Interfaces; namespace WindowsFormsApp5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; public static string GetSubString(string p_SrcString, int p_Length, string p_TailString) { string myResult = p_SrcString; if (p_Length >= 0) { byte[] bsSrcString = Encoding.Default.GetBytes(p_SrcString); if (bsSrcString.Length > p_Length) { int nRealLength = p_Length; int[] anResultFlag = new int[p_Length]; byte[] bsResult = null; int nFlag = 0; for (int i = 0; i < p_Length; i++) { if (bsSrcString[i] > 127) { nFlag++; if (nFlag == 3) { nFlag = 1; } } else { nFlag = 0; } anResultFlag[i] = nFlag; } if ((bsSrcString[p_Length - 1] > 127) && (anResultFlag[p_Length - 1] == 1)) { nRealLength = p_Length + 1; } bsResult = new byte[nRealLength]; Array.Copy(bsSrcString, bsResult, nRealLength); myResult = Encoding.Default.GetString(bsResult); myResult = myResult + p_TailString; } } return myResult; } private void button1_Click(object sender, EventArgs e) { string encryptKey = "12345678"; string encryptString = textBox2.Text; encryptKey = GetSubString(encryptKey, 8, ""); encryptKey = encryptKey.PadRight(8, ' '); byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); byte[] rgbIV = Keys; byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); //return Convert.ToBase64String(mStream.ToArray()); textBox1.Text = Convert.ToBase64String(mStream.ToArray()); } private void textBox1_TextChanged(object sender, EventArgs e) { } private static string CustomDB = string.Empty; string sPathKeys = "12345678"; private static string sCustomDB = string.Empty; private void button2_Click(object sender, EventArgs e) { CustomDB = textBox1.Text; sCustomDB = Machine_LogCopy.Data.Interfaces.DES.Decode(CustomDB, sPathKeys); textBox3.Text = sCustomDB; } } }
2、DES.cs里面的
using System; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using System.Text; namespace Machine_LogCopy.Data.Interfaces { public class DES { //默认密钥向量 private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; /// <summary> /// DES加密字符串 /// </summary> /// <param name="encryptString">待加密的字符串</param> /// <param name="encryptKey">加密密钥,要求为8位</param> /// <returns>加密成功返回加密后的字符串,失败返回源串</returns> public static string Encode(string encryptString, string encryptKey) { encryptKey = GetSubString(encryptKey, 8, ""); encryptKey = encryptKey.PadRight(8, ' '); byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); byte[] rgbIV = Keys; byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); return Convert.ToBase64String(mStream.ToArray()); } /// <summary> /// DES解密字符串 /// </summary> /// <param name="decryptString">待解密的字符串</param> /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param> /// <returns>解密成功返回解密后的字符串,失败返源串</returns> public static string Decode(string decryptString, string decryptKey) { try { decryptKey = GetSubString(decryptKey, 8, ""); decryptKey = decryptKey.PadRight(8, ' '); byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey); byte[] rgbIV = Keys; byte[] inputByteArray = Convert.FromBase64String(decryptString); DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); return Encoding.UTF8.GetString(mStream.ToArray()); } catch { return ""; } } /// <summary> /// 字符串如果操过指定长度则将超出的部分用指定字符串代替 /// </summary> /// <param name="p_SrcString">要检查的字符串</param> /// <param name="p_Length">指定长度</param> /// <param name="p_TailString">用于替换的字符串</param> /// <returns>截取后的字符串</returns> public static string GetSubString(string p_SrcString, int p_Length, string p_TailString) { string myResult = p_SrcString; if (p_Length >= 0) { byte[] bsSrcString = Encoding.Default.GetBytes(p_SrcString); if (bsSrcString.Length > p_Length) { int nRealLength = p_Length; int[] anResultFlag = new int[p_Length]; byte[] bsResult = null; int nFlag = 0; for (int i = 0; i < p_Length; i++) { if (bsSrcString[i] > 127) { nFlag++; if (nFlag == 3) { nFlag = 1; } } else { nFlag = 0; } anResultFlag[i] = nFlag; } if ((bsSrcString[p_Length - 1] > 127) && (anResultFlag[p_Length - 1] == 1)) { nRealLength = p_Length + 1; } bsResult = new byte[nRealLength]; Array.Copy(bsSrcString, bsResult, nRealLength); myResult = Encoding.Default.GetString(bsResult); myResult = myResult + p_TailString; } } return myResult; } } }