DES 加密的一些名词 : 原字符串 加密后字符串 密钥 与 向量
1。将原字符串转为 字节数组.使用 UTF8解码。
byte[] InputStrArr = System.Text.Encoding.UTF8.GetBytes(InputStr);
2.得到密钥与向量的字节数组 都为8位。
byte[] key ;
byte[] iv;
// 创建一个DES
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
// 创建一个内存流,用来将加密后的字节写入。
MemoryStream ms = new MemoryStream();
// 创建一个加密流。 他的第一个参数是一个流,可以是刚才定义的内存流 或是什么文件流都可以。
// 第二个参数是使用刚才定义的 DES 及密钥与向量.来生成一个加密/解密 器。加密为 CreateEncryptor,解密为 CreateDecryptor.
// 第三个参数是,这个加密流的模式,是写入的还是读出来的。 一般加密用写,解密用读。
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(keyArr, ivArr), CryptoStreamMode.Write);
// 使用这个加密流, 将,原字符串,写入内存流
cs.write(inputStrArr,0,inputStrArr.length);
cs.FlushFinalBlock();
cs.Close();
// 得到内存流的字节数组.
byte[] result = ms.ToArray();
ms.Close();
// 最后的结果返回一个 Base64String.
// 这里比较重要。要不然,有可能解密时说什么要解密的字符串长度有问题
return Convert.ToBase64String(result);
-----------解密时。
把输入的加密后的字符串转成字节数组,就不能使用 Text.Encoding了。 需要使用Convert.FromBase64String(cipherStr); 与加密的呼应。这样确保了字符串的格式正确。
在最后得到解密后的字符串时。 再使用 UTF8解码。 就可以正确的解出原字符串了。