栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C# .NET框架 DES ECB加密解密

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# .NET框架 DES ECB加密解密

.NET框架中由命名空间System.Security.Cryptography包含与签名、加密相关的类。
DES加密是一种对称加密算法,对称加密算法用同一个密钥对数据加密和解密,因此命名,适合对大批量的数据加密。
DES加密对应的类是DESCryptoServiceProvider。
ECB(Electronic Codebook,电码本)是DES的一种,是分组密码的一种最基本的工作模式。密钥为8字节,数据块为8字节,分别对每数据块独立进行加密或解密处理。具有操作简单,易于实现的特点。同时由于其分组的独立性,利于实现并行处理,并且能很好地防止误差传播。另一方面由于所有分组的加密方式一致,明文中的重复内容会在密文中有所体现,因此难以抵抗统计分析攻击。因此,ECB模式一般只适用于小数据量的字符信息的安全性保护,例如密钥保护。不依赖向量,易受到字典攻击。

 //DES加密 ECB 
 public static byte[] Encrypt(string encryptString, string sKey)
 {
     try
     {
         string key;
         //密钥为8位
         if (sKey.Length <= 8)
         {
             key = sKey.PadRight(8, '0');
         }
         else
         {
             key = sKey.Substring(0, 8);
         }
         
         byte[] keyBytes = Encoding.Default.GetBytes(key);
         byte[] keyIV = keyBytes;
         byte[] encryptBytes = Encoding.Default.GetBytes(encryptString);
                      
         DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
         // 使用ECB方式
         desProvider.Mode = CipherMode.ECB;
         // PKCS7padding
         desProvider.Padding = PaddingMode.PKCS7;
         MemoryStream memStream = new MemoryStream();
         //CreateEncryptor(keyBytes, keyIV)类似于OpenSSL中的密钥置换
         CryptoStream crypStream = new CryptoStream(memStream, desProvider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write);
         crypStream.Write(encryptBytes, 0, encryptBytes.Length);
         crypStream.FlushFinalBlock();
         byte[] cipherBytes = memStream.ToArray();
         
         return cipherBytes;
     }
     catch
     {
         return Encoding.Default.GetBytes(encryptString);
     }
 }
 //DEC解密 ECB
public static string Decrypt(string decryptString, string sKey)
{
    //key为8位
    string key;
    if (sKey.Length <= 8)
    {
        key = sKey.PadRight(8, '0');
    }
    else
    {
        key = sKey.Substring(0, 8);
    }
    byte[] keyBytes = Encoding.Default.GetBytes(key);
    byte[] keyIV = keyBytes;
    byte[] inputByteArray = Convert.FromBase64String(decryptString);
    
    DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
    desProvider.Mode = CipherMode.ECB;
    MemoryStream memStream = new MemoryStream();
    CryptoStream crypStream = new CryptoStream(memStream, desProvider.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write);
    crypStream.Write(inputByteArray, 0, inputByteArray.Length);
    crypStream.FlushFinalBlock();
    
    return Encoding.Default.GetString(memStream.ToArray());
}

PKCS7padding
DES加密对明文有长度要求,所以会ECB要求密钥为8位,明文会被分成8字节一组的数据块,对每个数据块单独加密,然后拼接,这样数据不是8的整数倍就必须对最后一个数据块填充,填充方式一般有PKCS7Padding/PKCS5Padding/ZeroPadding。DESCryptoServiceProvider类默认的填充方式是PKCS7padding,块大小是8字节,实际上就是PKCS5Padding。数据块大小是8字节,假设数据长度需要n(0

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/910609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号