110,577
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
namespace wintest
{
//封装十六进制字符串的位运算,以及加解密算法
static class packetchg
{
//将十六进制的字符串转换成字节数组
public static byte[] hextobyte(string hex)
{
byte[] result;
if (hex.Count() % 2 == 1)
{
hex += "0";
}
int i;
int hexlen;
hexlen = hex.Count() / 2;
result = new byte[hexlen];
for (i = 0; i < hexlen; i++)
{
result[i] = (byte)Convert.ToUInt32(hex.Substring(i * 2, 2), 16);
}
return result;
}
//将字节数组转换成十六进制的字符串
public static string bytetohex(byte[] bytes)
{
string result;
result = "";
int lenhex = bytes.Count();
int i;
for (i = 0; i < lenhex; i++)
{
result += Convert.ToString(bytes[i], 16).PadLeft(2, '0');
}
return result;
}
//将字节数组用逗号连接成字符串
public static string bytetostring(byte[] bytes)
{
string result = "";
int bytecount = bytes.Count();
int i;
for (i = 0; i < bytecount; i++)
{
result += bytes[i] + ",";
}
return result;
}
//将字节数组进行异或运算
public static byte[] bytexor(byte[] bytea, byte[] byteb)
{
int lena = bytea.Count();
int lenb = byteb.Count();
int lenresult;
if (lena > lenb)
{
lenresult = lenb;
}
else
{
lenresult = lena;
}
byte[] byteresult = new byte[lenresult];
int i;
for (i = 0; i < lenresult; i++)
{
byteresult[i] = (byte)(bytea[i] ^ byteb[i]);
}
return byteresult;
}
//对十六进制的字符串进行异或运算(要求做异或的字符串必须长度一致,否则按短的字符串标准做异或)
public static string hexxor(string hexa, string hexb)
{
byte[] bytea = hextobyte(hexa);
byte[] byteb = hextobyte(hexb);
byte[] byteresult = bytexor(bytea, byteb);
return bytetohex(byteresult);
}
//DES加解密
public static string desende(string key, string data, int type = 0)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
CryptoStream desStream;
byte[] bytekey = hextobyte(key);
byte[] bytedata = hextobyte(data);
des.Key = bytekey;
// des.IV = bytekey;
des.Mode = CipherMode.ECB;
des.KeySize = 64;
des.FeedbackSize = 64;
MemoryStream streamout = new MemoryStream();
// 如果type为0,则视为加密操作
if (type == 0)
{
desStream = new CryptoStream(streamout, des.CreateEncryptor(), CryptoStreamMode.Write);
}
//解密操作
else
{
desStream = new CryptoStream(streamout, des.CreateDecryptor(), CryptoStreamMode.Write);
}
desStream.Write(bytedata, 0, bytedata.Count());
desStream.Close();
byte[] byteresult = streamout.ToArray();
des.Dispose();
return bytetohex(byteresult).ToUpper();
//return Convert.ToBase64String(streamout.ToArray());
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace wintest
{
public partial class frmdes : Form
{
public frmdes()
{
InitializeComponent();
}
private void bten_Click(object sender, EventArgs e)
{
txtdesresult.Text = packetchg.desende(txtdeskey.Text, txtdesdata.Text);
}
private void btde_Click(object sender, EventArgs e)
{
txtdesresult.Text = packetchg.desende(txtdeskey.Text, txtdesdata.Text,1);
}
}
}