首页 > 编程语言 >c#使用System.Security.Cryptography实现DES算法加密和解密

c#使用System.Security.Cryptography实现DES算法加密和解密

时间:2024-03-24 21:11:06浏览次数:22  
标签:加密 Cryptography c# DES 解密 ms new byte CryptoStream

c#使用System.Security.Cryptography实现DES算法加密和解密

在加密过程中,通常会将原始数据转换为字节数组,然后对其进行加密。而在解密过程中,需要将加密后的数据解密为原始字节数组,然后进行相应的处理。

//解密读取
public static string Decrypt(string data)
{
    try
    {
        byte[] key = Encoding.UTF8.GetBytes("12345678");//密钥
        byte[] iv = Encoding.UTF8.GetBytes("12345678");//IV主要是加密的时候加入到明文中。防止出现同一个明文的密文相同的情况
        byte[] dataByte
        try
        {
            dataByte = Convert.FromBase64String(data);//Base64 编码的字符串 data 解码为对  应的字节数组
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }
        //创建一个DESCryptoServiceProvider加密算法实例,利用CreateDecryptor方法来创建解密器
        DESCryptoServiceProvider cp = new DESCryptoServiceProvider();
        //利用dataByte字节数组转化为MemoryStream数据流
        MemoryStream ms = new MemoryStream(dataByte);
        //ms:流 2.解码器 3.模式
        CryptoStream cs = new CryptoStream(ms, cp.CreateDecryptor(key, iv),      CryptoStreamMode.Read);
        StreamReader sr = new StreamReader(cs);
        return sr.ReadToEnd();
    }
    catch (Exception ex)
    {
        return "";
    }
}
//加密
public static string Encryption(string data)
{
    try
    {
        byte[] key = ASCIIEncoding.ASCII.GetBytes("12345678");
        byte[] iv = ASCIIEncoding.ASCII.GetBytes("12345678");
        using (DESCryptoServiceProvider cp = new DESCryptoServiceProvider())
        {
            M// 创建内存流
         MemoryStream ms = new MemoryStream();
    // 使用加密器创建 CryptoStream 对象
         CryptoStream cs = new CryptoStream(ms, cp.CreateEncryptor(key, iv),       CryptoStreamMode.Write);
    // 创建 StreamWriter 对象,用于向 CryptoStream 中写入数据
    StreamWriter sw = new StreamWriter(cs);
    // 将要加密的数据写入 CryptoStream
    sw.Write(data);
    // 刷新 StreamWriter 缓冲区
    sw.Flush();
    // 刷新 CryptoStream 的最终块
    cs.FlushFinalBlock();
    // 刷新内存流
    ms.Flush();
    // 将加密后的数据转换为 Base64 字符串并返回
    return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
        }
    }
    catch (Exception ex)
    {
        return "";
    }
}

标签:加密,Cryptography,c#,DES,解密,ms,new,byte,CryptoStream
From: https://www.cnblogs.com/f2825417199/p/18093066

相关文章

  • Docker网络原理
    本文主要讲解Docker的网络原理。在此之前,最好对网络命名空间、Veth设备对、网桥、路由、netfilter与iptables等Linux基础网络知识有所了解,详见《Docker的Linux网络基础》。 一、Docker的网络原理1.Docker的网络模式标准的Docker支持4种网络模式,可以在......
  • JUC并发编程(六)
    1、无锁实现保护共享资源       此前提到过,多个线程同时操作共享资源会导致安全问题,常见的方式是通过加锁(synchronized,reentranlock)解决。但是很显然加锁在某些场景下会影响性能,是否有一种方式可以不用加锁,且保证线程安全?下面来看一个案例1.1、案例一@Slf4j(topic......
  • ACM校赛的几个题
     c语言中的小小白-CSDN博客c语言中的小小白关注算法,c++,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm=1001.2014.3001.5343给大家分享一句我很喜欢我话:知不足而奋进,望远山而前行!!!铁铁们,成功的路上必......
  • 15 分钟带你感受 CSS :has() 选择器的强大
    最近看到了许多关于:has()选择器的知识点,在此总结下来。MDN对:has()选择器的解释是这样的:CSS函数式伪类 :has() 表示一个元素,如果作为参数传递的任何相对选择器在锚定到该元素时,至少匹配一个元素。这个伪类通过把可容错相对选择器列表作为参数,提供了一种针对引用元......
  • vscan开源、轻量、快速、跨平台 的网站漏洞扫描工具
    https://github.com/veo/vscan 编译/安装/运行•参数说明•使用方法•使用场景•POC列表•自定义扫描器Features特征vscan快速的端口扫描、指纹探测功能快速的登录密码爆破功能快速的POC检测功能快速的敏感文件检测功能轻量、开源、跨平台使用支持指纹650(eHole)......
  • Reflective Journal I
    Duringthetwoweeksofstudy,Ihavegainedadeeperunderstandingofmultimodalwriting,whichisacombinationoftext,images,audioandvideosoastoexpressinformationmorecomprehensivelyandunderstandthecontentmoreintuitively.Besides,Iha......
  • SC2440 DMA使用
    DMA介绍可见:https://www.cnblogs.com/lethe1203/p/18092378本节复习2440DMA使用参考资料:韦东山驱动第二期 DMA字符驱动代码:#include<linux/module.h>#include<linux/kernel.h>#include<linux/fs.h>#include<linux/init.h>#include<linux/delay.h>#incl......
  • Reflective Journal I
    Ihavelearnedalotinclassrecently.First,Ilearnedwhatdigitalmultimodalcomposingis.ItconvertstraditionalpaperandpenmediaintocomputerorInternetmedia,andproducesdigitaltextbycombiningtext,imageandsound.Then,Ialsoknowthe......
  • CPU
    1.CPU的定义:CPU是计算机系统的核心部件,它负责获取程序指令、对指令进行译码并加以执行。2.CPU的组成:(1)控制器:<1>程序控制;<2>操作控制;<3>时间控制。(2)运算器:<1>数据处理。 真题: 答案:A......
  • 【C++】每日一题 452 用最少数量的箭引爆气球
    有一些球形气球贴在一堵用XY平面表示的墙面上。墙面上的气球记录在整数数组points,其中points[i]=[xstart,xend]表示水平直径在xstart和xend之间的气球。你不知道气球的确切y坐标。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有......