数据加密中的DES加密算法详解(2)

2025-04-27


 
  一个S盒中具有4种替换表(行号用0、1、2、3表示),通过输入的6位的开头和末尾两位选定行,然后按选定的替换表将输入的6位的中间4位进行替代,例如:当向S1输入011011时,开头和结尾的组合是01,所以选中编号为1的替代表,根据中间4位1101,选定第13列,查找表中第1行第13列所示的值为5,即输出0101,这4位就是经过替代后的值。按此进行,输出32位,再按照表4 单纯换位表P进行变换,这样就完成了f(R,K)的变换,如图2所示。
 
  3.子密钥生成过程
  钥通常表示为64位的自然数,首先通过压缩换位PC-1去掉每个字节的第8位,用作奇偶校验,因此,密钥去掉第8、16、24……64位减至56位,所以实际密钥长度为56位,而每轮要生成48位的子密钥。
  输入的64位密钥,首先通过压缩换位得到56位的密钥,每层分成两部分,上部分28位为C0,下部分为D0。C0和D0依次进行循环左移操作生成了C1和D1,将C1和D1合成56位,再通过压缩换位PC-2输出48位的子密钥K1,再将C1和D1进行循环左移和PC-2压缩换位,得到子密钥K2......以此类推,得到16个子密钥。密钥压缩换位表如表6所示。在产生子密钥的过程中,L1、L2、L9、L16是循环左移1位,其余都是左移2位,左移次数如表7所示。
 
  4.解密处理过程
  从密文到明文的解密过程可采用与加密完全相同的算法。不过解密要用加密的逆变换,就是把上面的最后换位表和初始换位表完全倒过来变换。这里不再赘述。
  下面这个例子中演示了如何使用c#中的加密包进行DES算法加密,大家可以借助这个例子一窥DES加密的用法。
  des_demo.cs代码如下:
  using System;
  using System.Security.Cryptography;
  using System.IO;
  using System.Text;
  public class EncryptStringDES {
   public static void Main(String[] args) {
   if (args.Length < 1) {
   Console.WriteLine("Usage: des_demo
  encrypt>", args[0]);
   return;
   }
   // 使用UTF8函数加密输入参数
   UTF8Encoding utf8Encoding = new UTF8Encoding();
   byte[] inputByteArray = utf8Encoding.GetBytes(args
  [0].ToCharArray());
   // 方式一:调用默认的DES实现方法DES_CSP.
   DES des = DES.Create();
   // 方式二:直接使用DES_CSP()实现DES的实体    //DES_CSP DES = new DES_CSP();
   // 初始化DES加密的密钥和一个随机的、8比特的初始化向量(IV)
   Byte[] key = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab,
  0xcd, 0xef};
   Byte[] IV = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab,
  0xcd, 0xef};
   des.Key = key;
   des.IV = IV;
   // 建立加密流
   SymmetricStreamEncryptor sse = des.CreateEncryptor();
   // 使用CryptoMemoryStream方法获取加密过程的输出
   CryptoMemoryStream cms = new CryptoMemoryStream();
   // 将SymmetricStreamEncryptor流中的加密数据输出到
  CryptoMemoryStream中
   sse.SetSink(cms);
   // 加密完毕,将结果输出到控制台
   sse.Write(inputByteArray);
   sse.CloseStream();
   // 获取加密数据
   byte[] encryptedData = cms.Data;
   // 输出加密后结果
   Console.WriteLine("加密结果:");
   for (int i = 0; i < encryptedData.Length; i++) {
   Console.Write("{0:X2} ",encryptedData[i]);
   }
   Console.WriteLine();
   //上面演示了如何进行加密,下面演示如何进行解密
   SymmetricStreamDecryptor ssd = des.CreateDecryptor();

数据加密中的DES加密算法详解(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:VPN技术在图书馆网络互联中的应用

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219