一个关于BCD压缩和单DES算法的问题,请高手赐教!
我有一个16位的数据,首先要进行BCD压缩成8位,仍然后再做单DES加密。我的代码如下:
private void but_login_Click(object sender, EventArgs e)
{
string str = "8B0E5C4A224B15B1";
if (str.Length % 2 == 1)
{
str = str + "0";
}
byte[] mybyte = new byte[str.Length / 2];
byte[] mytbt = Encoding.ASCII.GetBytes(str);
for (int i = 0; i < mytbt.Length; i = i + 2)
{
int a = mytbt[i] % 16;
int b = mytbt[i + 1] % 16;
mybyte[i / 2] = Convert.ToByte((((byte)a) << 4) + (((byte)b)));
}
byte[] test = HCDESHCDES(mybyte, Encoding.ASCII.GetBytes("1111111111111111"));
}
public byte[] HCDES(byte[] Key, byte[] Data)
{
//创建一个DES算法的加密类
DESCryptoServiceProvider MyServiceProvider = new DESCryptoServiceProvider();
MyServiceProvider.Mode = CipherMode.CBC;
MyServiceProvider.Padding = PaddingMode.None;
ICryptoTransform MyTransform = MyServiceProvider.CreateEncryptor(Key, new byte[8]);
//CryptoStream对象的作用是将数据流连接到加密转换的流
MemoryStream ms = new MemoryStream();
CryptoStream MyCryptoStream = new CryptoStream(ms, MyTransform, CryptoStreamMode.Write);
//将字节数组中的数据写入到加密流中
MyCryptoStream.Write(Data, 0, Data.Length);
//关闭加密流对象
byte[] bEncRet = new byte[8];
// Array.Copy(ms.GetBuffer(), bEncRet, ms.Length);
bEncRet = ms.ToArray(); // MyCryptoStream关闭之前ms.Length 为8, 关闭之后为16
MyCryptoStream.FlushFinalBlock();
MyCryptoStream.Close();
byte[] bTmp = ms.ToArray();
ms.Close();
// return bEncRet;
return bTmp;//
}
1.压缩后的结果是:
mybyte {维数:[8]} byte[]
[0] 130 byte
[1] 5 byte
[2] 83 byte
[3] 65 byte
[4] 34 byte
[5] 66 byte
[6] 21 byte
[7] 33 byte
2.加密以后的结果是:
test {维数:[16]} byte[]
[0] 117 byte
[1] 106 byte
[2] 57 byte
[3] 6 byte
[4] 18 byte
[5] 97 byte
[6] 236 byte
[7] 116 byte
[8] 93 byte
[9] 226 byte
[10] 203 byte
[11] 52 byte
[12] 161 byte
[13] 12 byte
[14] 211 byte
[15] 207 byte
但是我用软件计算的结果是:F8E6027CAA34A909
请问:
1.我的压缩和3DES这样写对不对。
2.我要向吧byte的压缩结果变成F8E6027CAA34A909。要怎么做?
谢谢了,在线等!急!